ERROR / AndroidRuntime(775):java.lang.RuntimeException:无法启动活动ComponentInfo {..}:java.lang.NullPointerException

时间:2011-11-13 13:29:47

标签: android onclick nullpointerexception simplecursoradapter

这个问题可能看起来像是重复的问题。但那些问题并没有帮助我解决我的问题。

我想在列表(婴儿名称)上实现“onClick”事件,该事件填充了SimpleCursorAdapter。当用户点击某个名称时,将生成一个显示数据库中记录“id”的Toast。

这是我的代码 -

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}

谢谢。

2 个答案:

答案 0 :(得分:2)

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

尝试使用

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

答案 1 :(得分:0)

您的common_names布局没有ID为commonName的视图,因此rowview为空,roview.setOnClickListener()为NPE。

实际上是

的错误信息
...(775): Caused by: java.lang.NullPointerException
...(775):     at balu.android.CommonNames.onCreate(CommonNames.java:42)
你粘贴的堆栈跟踪中的

应该很容易找到它,因为NPE在CommonNames.java第42行