2011-10-28 23 views
2

我正在開發一個android應用程序,以列出存儲在瀏覽器中的書籤,並使用遊標和遊標適配器將其填充到列表中。我根本沒有任何問題填充列表,我的問題都在點擊。我使用的是onItemClickListener,當用戶點擊列表項時,應用程序崩潰。如何在填充遊標對象時使列表可點擊?

的logcat的出把這樣的:下面

10-27 23:54:22.718: ERROR/CursorWindow(315): Bad request for field slot 0,2131034113.  
numRows = 15, numColumns = 12 

10-27 23:54:22.738: ERROR/AndroidRuntime(315): java.lang.IllegalStateException: get  
field slot from row 0 col 2131034113 failed 

是我的代碼。

import android.app.Activity; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.Browser; 
import android.provider.Browser.BookmarkColumns; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TextView; 



@SuppressWarnings("unused") 
public class BookmarksActivity extends ListActivity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    Uri bookmarks = Browser.BOOKMARKS_URI; 
    final Cursor managedCursor = managedQuery(bookmarks, null, null, null, null); 
    // Cursor managedCursor = managedQuery(bookmarks, bookmark, null, null, 
BookmarkColumns.TITLE ); 

    String[] bookmark = new String[]{ 
     BookmarkColumns.TITLE, 
     BookmarkColumns.URL, 
     BookmarkColumns._ID, 
     }; 


    // Bind to our new adapter. 


    int[] views = new int[] {R.id.urlTitle, R.id.urlUrl}; 

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.main, 
managedCursor, bookmark, views); 
    this.setListAdapter(adapter); 

    //list = (listView)adapter; 

    this.getListView().setOnItemClickListener(new OnItemClickListener(){ 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 

      // TODO Auto-generated method stub 
      Intent i = new Intent(android.content.Intent.ACTION_VIEW, 
        Uri.parse(managedCursor.getString(R.id.urlUrl))); 
      startActivity(i); 
     } 

    }); 

    getColumnData(managedCursor); 


} 



//getColumnData will go through the supplied cursor and get the data we need 
// in this case webpage titles and urls. 
// i will late implement the favicon. 
private void getColumnData(Cursor cur) 
{ 
    if (cur.moveToFirst()){ 

     String title; 
     String url; 

     int titleColumn = cur.getColumnIndex(BookmarkColumns.TITLE); 
     int urlColumn = cur.getColumnIndex(BookmarkColumns.URL); 

     String imagePath; 

     do{ 
      title = cur.getString(titleColumn); 
      url = cur.getString(urlColumn); 

      Log.d("+-CURSOR-+", title + " " + url); 

     }while(cur.moveToNext()); 

    } 




} 
} 
+0

以下鏈接的答案看起來不錯。請注意,您甚至沒有在onItemClick中使用「位置」。 http://stackoverflow.com/questions/5553176/android-simplecursoradapter-setonitemclicklistener-problem –

回答

1

方法onItemClick有參數

我不知道,如果你的managedCursor已經在使用它您onItemClick內移動至正確的位置。您可以嘗試先撥打move方法

c.moveToPosition(position) 
+0

「...我不知道你的managedCursor是否已經移動到正確的...」這就是爲什麼我們通常使用'Cursor c =(Cursor)parent.getItemAtPosition(position);'in'onItemClick(AdapterView parent,View view,int position,long id)' – Selvin

+0

感謝您的回覆,但我仍然得到相同的錯誤輸出。光標似乎正在移動到正確的行。如果我單擊列表中的第一個項目它顯示行0第二行1等,我的問題是列。它正在查看不存在的列2131034113。 –