О получении значений из SQLite - PullRequest
0 голосов
/ 05 июля 2010

Я хочу установить textview в качестве значений из SQLite, когда я нажимаю ListView Вот мой путь:

myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
public void onItemClick(AdapterView arg0, 
android.view.View arg1, int arg2, long arg3) { 
myCursor.moveToPosition(arg2); 
setContentView(R.layout.main2); 
_id = myCursor.getInt(0); 
textStudyUID.setText(myCursor.getString(0)); 

Но есть исключение, вот журнал:

07-05 12:37:16.613: ERROR/AndroidRuntime(17689): java.lang.NullPointerException
07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at irdc.sqlitetest2.SQLiteTest2$1.onItemClick(SQLiteTest2.java:53)
07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at android.widget.ListView.performItemClick(ListView.java:3285)
07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)
07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at android.os.Handler.handleCallback(Handler.java:587)
07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at android.os.Handler.dispatchMessage(Handler.java:92)
07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at android.os.Looper.loop(Looper.java:123)
07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at android.app.ActivityThread.main(ActivityThread.java:4363)
07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at java.lang.reflect.Method.invokeNative(Native Method)
07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at java.lang.reflect.Method.invoke(Method.java:521)

07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)

07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-05 12:37:16.613: ERROR/AndroidRuntime(17689): at dalvik.system.NativeStart.main(Native Method)

Вот полный код:

public class SQLiteTest2<View> extends Activity {       
    private DoDB ToDoDB;
    private Cursor myCursor;
    private int _id;
    private ListView myListView;
    public TextView textStudyUID;
    protected ListAdapter adapter1;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);   
        myListView = (ListView)findViewById(R.id.ListView);
        textStudyUID = (TextView)findViewById(R.id.widget40);
        ToDoDB = new DoDB(this);
        myCursor = ToDoDB.select();
        SimpleCursorAdapter adapter1 = new SimpleCursorAdapter(this,R.layout.list,myCursor,new String[]{DoDB._StudyUID},new int[]{R.id.listTextView1});
        myListView.setAdapter(adapter1);

        myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> arg0,android.view.View arg1, int arg2,                                     long arg3) {
               myCursor.moveToPosition(arg2);
               setContentView(R.layout.main2);
               _id = myCursor.getInt(9);
               textStudyUID.setText(myCursor.getString(0));
        }
      });

1 Ответ

0 голосов
/ 05 июля 2010

Вы не сможете получить доступ к myCursor внутри анонимной функции (onItemClick) из-за области видимости, но нужный вам курсор уже передан в функцию. Получить его, используя:

CursorAdapter adapter = (CursorAdapter) arg0.getAdapter();
Cursor myCursor = adapter.getCursor();

Вы можете рассмотреть возможность правильного присвоения имен параметрам для улучшения читабельности. I.e.:

public void onItemClick(AdapterView<? extends Adapter> parent, View v, int position, long id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...