2010-07-05 10 views
0

Je veux mis un textview comme les valeurs de SQLite quand je clique sur le ListView Voici mon chemin:A propos obtenir les valeurs de SQLite

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)); 

Mais il y a une exception, voici le journal:

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) 

Voici le code complet:

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)); 
     } 
     }); 
+0

Comment myCursor est-il rempli, et est-il rendu 'final' en dehors de' OnItemClickListener'? –

+0

Veuillez formater votre code en utilisant le bouton '101010' au-dessus du champ d'édition de texte. –

+0

J'ai déjà peuplé myCursor comme ce "Cursor myCursor privé" à l'extérieur. – Kooper

Répondre

0

Vous ne pourrez pas accéder à myCursor à l'intérieur de la fonction anonyme (onItemClick) en raison de la portée, mais le curseur que vous recherchez est déjà transmis à la fonction. Récupérez-le en utilisant:

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

Vous pouvez envisager de nommer correctement les paramètres pour améliorer la lisibilité. I.e .:

public void onItemClick(AdapterView<? extends Adapter> parent, View v, int position, long id) 
+0

J'utilise "private final Cursor myCursor" mais il dit nécessaire "=" – Kooper

+0

Excuses, la première réponse était erronée mais j'ai mis à jour avec la bonne méthode. –

+0

J'ai changé comme ceci: public void onItemClick (AdapterView parent, android.view.View arg1, position int, identifiant long) { CursorAdapter adapter = (CursorAdapter) parent.getAdapter(); Curseur myCursor = adapter.getCursor(); myCursor.moveToPosition (position); setContentView (R.layout.main2); _id = myCursor.getInt (9); textStudyUID.setText (myCursor.getString (0)); – Kooper