2017-04-10 6 views
0

からjson parser httpを含むアクティビティを開始できませんでした。私は2つの活動を持っています、最初は主活動であり、他は第2活動です。 2番目のアクティビティには、httpでjsonパーサーを使用したデータが含まれています。そして、私はメインアクティビティのボタンを追加しました。私は2番目のアクティビティにジャンプするボタンをクリックしたが、アプリケーションが停止しました。どうすればこの問題を解決できますか?メインアクティビティ

ここでの主なアクティビティここ

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(私は第二の活動を実行すると、それが正常に動作しています。)ここ

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

     } 

    } 

} 

マニフェスト

<?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> 

スタックは、ここにあなたが必要

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)  
+1

問題は2番目のアクティビティでスタックトレースと2番目のアクティビティコード –

+0

を入れてください。ただし、2番目のアクティビティを実行するとうまくいきます。 – ARLEQUINA

+0

マニフェストでアクティビティが宣言されているかどうかを確認します – Ashish

答えて

0

をトレースを含めるあなたのMainActivityでsuper.onCreate(savedInstanceState);メソッドの後に続きを読むhere

レイアウトを設定しないと、アクティビティにはビューがありません(レイアウトをプログラムで構築する場合を除き、レイアウトに固執する方が簡単です)。 findViewBy(R.id.button1)は、このIDを持つビューが見つからないため、nullを返します。これにより、b.setOnClickListener(...)のNullPointerExceptionが発生します。

+0

ok、私は更新後にそれを試します:)あなたの助言に感謝します。 – ARLEQUINA

関連する問題