0

此问题可能看起来像重复的问题。但这些查询并没有帮助我解决我的问题。错误/ AndroidRuntime(775):java.lang.RuntimeException:无法启动活动ComponentInfo {..}:java.lang.NullPointerException

我想在SimpleCursorAdapter中填充(婴儿名称)列表中实现“onClick”事件。当用户点击一个名字时,就会生成一个吐司,显示数据库中记录的“id”。

这里是我的代码 -

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

这里是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> 

这里是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> 

当我运行我的应用程序,我得到一个运行时NullPointerException。这是LogCat。请帮我解决这个问题。

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} 

谢谢。

+0

你有CommonNames空值.java line 42. NPE(通常)是最容易解决的例外情况。您应该了解调试器的工作原理。尝试一下!顺便说一句:没有代码的例外对我们来说毫无价值......并且不,没有人想要浏览github来搜索特定的代码... – WarrenFaith

+0

好的!我会在这里保存我的代码。谢谢。 –

回答

2

您不应该在行视图上设置onClickListener。只有设置onclick事件一行,如果没有内容就会崩溃(这可能是你的问题)

尝试使用

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

同意。它会崩溃,因为没有元素与'R.id.commonName'尚未(因此rowview为空)。由于您使用的是ListView,所以在'onResume()'期间/之后的某个时刻,实际的组件会被渲染,直到ListView本身被布置。 – dmon

+0

@Maria,我改变了你的说法。现在我得到另一个错误。 ' 致命例外︰主 错误/ AndroidRuntime(805):java.lang.IllegalStateException:android.widget.LinearLayout不是可以由此SimpleCursorAdapter约束的视图 11-13 19:42:04.462:ERROR/AndroidRuntime' –

+0

@dmon这里是我在onResume()实现它后的错误链接()[link](http://stackoverflow.com/questions/8112491/error-androidruntime805-java-lang-illegalstateexception-android-widget-linea )。 –

0

你common_names布局具有的commonName所以rowview是id的视图null和roview.setOnClickListener()将NPE。

实际的

...(775): Caused by: java.lang.NullPointerException 
...(775):  at balu.android.CommonNames.onCreate(CommonNames.java:42) 
在您粘贴它应该很容易找出这个堆栈跟踪

错误消息,因为NPE是CommonNames.java线42

相关问题