0

Cette question peut sembler répétée. Mais ces requêtes ne m'ont pas aidé à résoudre mon problème.ERROR/AndroidRuntime (775): java.lang.RuntimeException: Impossible de démarrer l'activité ComponentInfo {..}: java.lang.NullPointerException

Je voudrais implémenter l'événement "onClick" dans la liste (des noms de bébé) qui est peuplée avec SimpleCursorAdapter. Chaque fois que l'utilisateur clique sur un nom, un toast sera généré montrant l'identifiant de l'enregistrement dans la base de données.

Voici mon code -

public class CommonNames extends Activity { 

TextView rowview; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.common_names); 

    rowview = (TextView)findViewById(R.id.commonName); 

    CommonNamesAdapter cnTable = new CommonNamesAdapter(this); 
    ListView cnListView = (ListView)findViewById(R.id.common_name_layout); 

    cnTable.open(getApplicationContext()); 
    Cursor c = cnTable.fetch_all_common_names_only(); 
    startManagingCursor(c); 

    if(c!=null){ 
     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
       R.layout.listview, 
       c, 
       new String[] {c.getColumnName(0), c.getColumnName(1)}, 

       new int[] {R.id.rowLayout,R.id.commonName}); 

       cnListView.setAdapter(adapter); 

     } 


    rowview.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 

      Context context = getApplicationContext(); 

      String id = context.getString(R.id.commonName); 
      CharSequence text = "This id of this item is... "+id ; 
      int duration = Toast.LENGTH_SHORT; 

      Toast toast = Toast.makeText(context, text, duration); 
      toast.show(); 

     } 


    }); 
    cnTable.close(); 
} 

Voici listview.xml

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/rowLayout" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
> 
<TextView 
    android:id="@+id/commonName" 
    android:layout_alignParentLeft="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="16dp" 
    android:paddingLeft="14dp" 
    android:paddingTop="4dp" 
    android:paddingBottom="4dp" 
/> 

</LinearLayout> 

Voici common_names.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 
<ListView 
    android:id = "@+id/common_name_layout" 
    android:layout_width="fill_parent" 
    android:layout_height= "wrap_content" > 
</ListView> 
</LinearLayout> 

Quand je lance ma demande, je reçois un Runtime NullPointerException. Voici le LogCat. S'il vous plaît aidez-moi à résoudre ce problème.

11-13 18:23:27.852: INFO/COMMON_NAMES_TABLE(775): Inserting record... 
11-13 18:23:27.902: INFO/COMMON_NAMES_TABLE(775): OPening DataBase Connection.... 
11-13 18:23:28.002: DEBUG/AndroidRuntime(775): Shutting down VM 
11-13 18:23:28.002: WARN/dalvikvm(775): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775): FATAL EXCEPTION: main 
11-13 18:23:28.012: ERROR/AndroidRuntime(775): java.lang.RuntimeException: Unable to start activity ComponentInfo{balu.android/balu.android.CommonNames}: java.lang.NullPointerException 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at android.os.Looper.loop(Looper.java:123) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at java.lang.reflect.Method.invoke(Method.java:521) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at dalvik.system.NativeStart.main(Native Method) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775): Caused by: java.lang.NullPointerException 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at balu.android.CommonNames.onCreate(CommonNames.java:42) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
11-13 18:23:28.012: ERROR/AndroidRuntime(775):  ... 11 more 
11-13 18:23:28.032: WARN/ActivityManager(59): Force finishing activity balu.android/.CommonNames 
11-13 18:23:28.032: WARN/ActivityManager(59): Force finishing activity balu.android/.Select 
11-13 18:23:28.585: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{45025710 balu.android/.CommonNames} 
11-13 18:23:31.192: INFO/Process(775): Sending signal. PID: 775 SIG: 9 
11-13 18:23:31.212: INFO/ActivityManager(59): Process balu.android (pid 775) has died. 
11-13 18:23:31.212: INFO/WindowManager(59): WIN DEATH: Window{45084738 balu.android/balu.android.BabyNamesAppActivity paused=false} 

Merci.

+0

Vous avez une valeur nulle dans CommonNames La ligne .java 42. Les NPE sont (souvent) les exceptions les plus faciles à réparer. Vous devriez apprendre comment fonctionne un débogueur. Essayez-le! Et en passant: Une exception sans le code ne vaut rien pour nous ... et non, personne ne veut parcourir github pour rechercher le code spécifique ... – WarrenFaith

+0

Ok! Je vais garder mon code ici. Je vous remercie. –

Répondre

2

Vous ne devez pas définir onClickListener dans la vue ligne. Ce dernier prévoit que l'événement onClick à une ligne et s'il n'y a pas de contenu, il plantera (ce qui est probablement votre problème)

essayez d'utiliser

cnListView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView parent, View v, int position, long id) 
    { 
    } 
}); 
+0

D'accord. Il plante parce qu'il n'y a pas encore d'élément avec le 'R.id.commonName' (donc rowview est null). Puisque vous utilisez un ListView, les composants réels sont rendus jusqu'à ce que ListView lui-même soit mis en page, à un moment donné pendant/après 'onResume()'. – dmon

+0

@ Maria, j'ai changé comme tu l'as dit. Maintenant, je reçois une autre erreur. ' FATAL EXCEPTION: principal ERROR/AndroidRuntime (805): java.lang.IllegalStateException: android.widget.LinearLayout n'est pas une vue qui peut être limitée par ce SimpleCursorAdapter 11-13 19: 42: 04.462: ERROR/AndroidRuntime' –

+0

@dmon Voici le lien vers l'erreur que j'ai eu après l'avoir implémenté dans onResume() [lien] (http://stackoverflow.com/questions/8112491/error-androidruntime805-java-lang-illegalstateexception-android-widget-linea). –

0

Votre mise en page de common_names n'a pas de vue avec l'id de commonName si rowview est null et roview.setOnClickListener() sera NPE.

En fait, le message d'erreur de

...(775): Caused by: java.lang.NullPointerException 
...(775):  at balu.android.CommonNames.onCreate(CommonNames.java:42) 

dans la trace de la pile que vous avez collé il devrait facile d'identifier ce, comme NPE est en ligne CommonNames.java 42

Questions connexes