Balu Varanasi
Balu Varanasi

Reputation: 193

ERROR/AndroidRuntime(775): java.lang.RuntimeException: Unable to start activity ComponentInfo{..}: java.lang.NullPointerException

This question may look like a repeated one. But those queries hadn't helped me to fix my problem.

I would like to implement "onClick" event on the list (of baby names) which is populated with SimpleCursorAdapter. When ever the user clicks on a name, a toast will be generated showing the "id" of the record in the database.

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

Here is 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>

Here is 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>

When I run my application I'm getting an Runtime NullPointerException. Here is the LogCat. Please help me in fixing this.

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}

Thank you.

Upvotes: 0

Views: 1887

Answers (2)

Heiko Rupp
Heiko Rupp

Reputation: 30934

Your common_names layout has no view with id of commonName so rowviewis null and roview.setOnClickListener() will NPE.

Actually by the error message of

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

in the stack trace you pasted it should easy to pinpoint this, as the NPE is in CommonNames.java line 42

Upvotes: 0

Maria Neumayer
Maria Neumayer

Reputation: 3357

You shouldn't set the onClickListener on the row view. That only sets the onClick event to one row and if there's no content it will crash (which is probably your problem)

try using

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

Upvotes: 2

Related Questions