2011-11-18 29 views
0

您好我開始在android(在eclipse中)編寫一個ToDo-List,它與Google Tasks同步並添加Google帳戶中的任務。 我實現了一個非常簡單的數據庫(根據本教程:SQLITE Tutorial)。 該項目包含一個活動,它只實現了一個listView和一個允許它添加任務的按鈕(父活動) 通過單擊按鈕,通過「startActivityForResult」啓動一個新的活動,您可以輸入一個名稱和一個類別。 (子活動) 然後這兩個字符串被傳遞給父活動並添加到數據庫中,該數據庫在父活動中初始化 現在,應該創建listview並設置simpleCursorAdapter;這就是應用程序崩潰的地方,在模擬器上和我的android手持設備上。 繼承人的啓動活動的代碼片段:Android:SimpleCursorAdapter&ListView

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    initDB(); 
    initUI(); 
} 

public void initUI() 
{ 
    Log.w(TAG, "initUI()"); 
    populateToDoList(); 

    listView = (ListView) findViewById(R.id.tasklist); 
    addButton = (Button) findViewById(R.id.addTask); 

    addButton.setOnClickListener(new OnClickListener() 
    { 

     @Override 
     public void onClick(View arg0) 
     { 
      // TODO Auto-generated method stub 
      Intent i = new Intent(RememberMe.this, AddTask.class); 
      startActivityForResult(i, REQUEST_CODE); 
    } }); 
} 

public void initDB() 
{ 
    toDoDBAdapter = new ToDoDBAdapter(RememberMe.this); 
    toDoDBAdapter.open(); 
} 

private void populateToDoList() 
{ 

    Log.w(TAG, "populateToDoList()"); 

    dbCursor = toDoDBAdapter.getAllToDoItemsCursor(); 
    Log.w(TAG, "getAllToDoItemsCursor()"); 

    startManagingCursor(dbCursor); 
    Log.w(TAG, "startManagingCursor()"); 

    String [] columns = { ToDoDBAdapter.KEY_NAME}; 
    int [] to = { android.R.id.text1 }; 
    Log.w(TAG, "Sring from int to"); 

    simpleCursor = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, dbCursor, columns, to); 
    Log.w(TAG, "new SimpleCursorAdapter()"); 

    listView.setAdapter(simpleCursor); 
    Log.w(TAG, "setAdapter()"); 

    simpleCursor.notifyDataSetChanged();  

} 

private void updateList() 
{ 

    dbCursor.requery(); 
    simpleCursor.notifyDataSetChanged(); 

} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if(resultCode == REQUEST_CODE) 
    { 
     String taskName = data.getStringExtra("taskName"); 
     String taskCategory = data.getStringExtra("taskCategory"); 

     toDoDBAdapter.createTask(taskName, taskCategory); 

     updateList(); 

     Toast.makeText(this, "Aufgabe hinzugefügt", Toast.LENGTH_LONG).show(); 
    } 
} 

@Override 
public void onDestroy() 
{ 
    super.onDestroy(); 
    toDoDBAdapter.close(); 
} 
} 

它停在

listView.setAdapter(simpleCursor); 
Log.w(TAG, "setAdapter()"); 

我不知道爲什麼還是出了什麼問題;我讀了有64位系統上與模擬器的問題,但該代碼好好嘗試一下無論是在我的方便和實施的列表視圖和設置simpleCursor不應該是如此棘手吳 繼承人工作的logcat: LogCat

+0

嘗試調用populateToDoList()中使用的函數的結果 – 2011-11-18 20:25:51

回答

1

你檢查過,以確保listView實際上不是null?調試你的代碼,一直到listView.setAdapter(simpleCursor);,並將鼠標懸停在listView上查看它是否爲空。

編輯:你沒有發現,它實際上是空,這裏是我發現的最常見的原因(S):

listView = (ListView) findViewById(R.id.tasklist); 

R.id.tasklist是區分大小寫的,請確保您的XML是不@+id/taskList或類似的東西或這將返回null

還要確保它拼寫完全正確,因爲它可能只是一個拼寫錯誤的情況。

+0

首先感謝你的回答, 和yep,你是對的,它是空的: - $ 啊好吧,我在視圖之前運行populateList()初始化..愚蠢Oo – vein

+0

一定要檢查大「複選標記」,如果這是解決您的問題的答案:)。它在左邊。 – Jack

+0

感謝您的幫助,單獨我不會檢查它是否爲空 – vein