0

i faced a problem. I have 2 activities, first one is main activity and other is second activity. A second activity contains a data using json parser over http. And i added button in main activity. When i clicked button that would be jump into second activity, but application stopped. How can i fix this?

Main activity here.

public class MainActivity extends Activity{

    Button b;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        b = (Button) findViewById(R.id.button1);

        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
    }
}

SecondActivity here (When i only run second activity, it's working fine.)

public class SecondActivity extends ListActivity {

    ListView mylist;
    ProgressDialog PD;

    // JSON Node names
    public static final String TAG_ID = "id";
    public static final String TAG_NAME = "name";
    //public static final String TAG_TYPE = "төрөл";

    public static final String TAG_MATH = "Mathematics";
    public static final String TAG_SCIE = "Science";
    public static final String TAG_COMP = "Computer";

    List<HashMap<String, String>> studentList = new ArrayList<HashMap<String, String>>();

    /* Called when the activity is first created. */
    @SuppressLint("NewApi")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ListView listview = getListView();
        listview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                String stud_id = studentList.get(position).get(TAG_ID);
                String stud_name = studentList.get(position).get(TAG_NAME);

                Intent stud_intent = new Intent(SecondActivity.this,
                        Student_Detail.class);

                stud_intent.putExtra("stud", studentList.get(position));

                startActivity(stud_intent);

            }
        });

        new MyTask().execute();

    }

    class MyTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            PD = new ProgressDialog(SecondActivity.this);
            PD.setMessage("Loading...");
            PD.setCancelable(false);
            PD.show();
        }

        @Override
        protected Void doInBackground(Void... arg0) {

            String webdata = new MakeRequest().MakeGetRequest();
            String name = null;

            try {
                JSONObject json = new JSONObject(webdata);

                JSONArray employee = json.getJSONArray("students");

                for (int i = 0; i < employee.length(); i++) {

                    JSONObject students = employee.getJSONObject(i);

                    HashMap student = new HashMap<String, String>();
                    student.put(TAG_ID, students.get(TAG_ID));
                    student.put(TAG_NAME, students.get(TAG_NAME));
                    //student.put(TAG_TYPE, students.get(TAG_TYPE));

                    JSONObject score = students.getJSONObject("score");
                    student.put(TAG_MATH, score.get(TAG_MATH));
                    student.put(TAG_SCIE, score.get(TAG_SCIE));
                    student.put(TAG_COMP, score.get(TAG_COMP));

                    studentList.add(student);

                }

            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;

        }

        @Override
        protected void onPostExecute(Void result) {

            super.onPostExecute(result);

            String[] from = { TAG_ID, TAG_NAME };
            int[] to = { R.id.stud_id, R.id.stud_name };

            ListAdapter adapter = new SimpleAdapter(getApplicationContext(),
                    studentList, R.layout.list_items, from, to);

            setListAdapter(adapter);

            PD.dismiss();

        }

    }

}

Manifest here

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.pavan.androidjsondemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.pavan.androidjsondemo.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity" ></activity>
        <activity android:name=".Student_Detail" >
        </activity>
    </application>

</manifest>

Stack trace here

04-11 00:42:29.751 2280-2280/? I/art: Not late-enabling -Xcheck:jni (already on)
04-11 00:42:29.751 2280-2280/? W/art: Unexpected CPU variant for X86 using defaults: x86
04-11 00:42:29.782 2280-2280/? W/System: ClassLoader referenced unknown path: /data/app/com.pavan.androidjsondemo-1/lib/x86
04-11 00:42:29.972 2280-2280/com.pavan.androidjsondemo D/AndroidRuntime: Shutting down VM


                                                                         --------- beginning of crash
04-11 00:42:29.972 2280-2280/com.pavan.androidjsondemo E/AndroidRuntime: FATAL EXCEPTION: main
                                                                         Process: com.pavan.androidjsondemo, PID: 2280
                                                                         java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pavan.androidjsondemo/com.pavan.androidjsondemo.MainAc}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                                                                             at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                             at android.os.Looper.loop(Looper.java:154)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                                                                          Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                             at com.pavan.androidjsondemo.MainAc.onCreate(MainAc.java:23)
                                                                             at android.app.Activity.performCreate(Activity.java:6662)
                                                                             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                                                                             at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                             at android.os.Looper.loop(Looper.java:154) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:6077) 
                                                                             at java.lang.reflect.Method.invoke(Native Method) 
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
ARLEQUINA
  • 129
  • 1
  • 1
  • 11

1 Answers1

0

You need to include setContentView(R.layout.activity_layout_xml_file) in your MainActivity after super.onCreate(savedInstanceState); method. Read more here.

When you do not set a layout, there are no views in the Activity (unless you construct the layout programmatically; it's easier to stick to layouts however). findViewBy(R.id.button1) will then return null because a view with this id cannot be found. This causes the NullPointerException on b.setOnClickListener(...).

lippertsjan
  • 309
  • 1
  • 18
Andrew Evtukhov
  • 423
  • 1
  • 6
  • 17