2016-04-05 9 views
0

データベースからリストビューにデータを表示するアプリケーションを作成しています。リストビュー上の項目をクリックすると、ユーザーは新しい項目に移動し、その項目に関する詳細を表示できます。私は、詳細ページを動的にして詳細を表示し、トースト内のリストビュー項目のタイトルを表示するようにしたいと考えています。渡されたインテントデータをTextViewに表示する方法 - NullPointerExceptionエラー

今、私は、文字列内のタイトルを表示する)のsetTextを(使用してこれを表示しようとしていますが、エラーを取得しています:

TextView titletext; 
final List<Activitytable> activityTable = Activitytable.listAll(Activitytable.class); 

String data = getIntent().getSerializableExtra("listPosition").toString(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_details); 

    TextView titletext = (TextView) findViewById(R.id.titletext); 

    String data = getIntent().getSerializableExtra("listPosition").toString(); 

    Toast.makeText(getBaseContext(),String.valueOf(data),Toast.LENGTH_LONG).show(); 

    setData(); 
} 

private void setData() { 
    Intent i = getIntent(); 
    Bundle b = i.getExtras(); 
    if (data != null) { 
     String j = (String) b.get("listPosition"); 
     titletext.setText(j); 
    } 
    else{ 
     titletext.setText("Hello"); 
    } 
} 

AndroidRuntime: FATAL EXCEPTION: main 
     Process: com.example.kathe.parenttripapp, PID: 22849 
                      java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.kathe.parenttripapp/com.example.kathe.parenttripapp.Details}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.Serializable android.content.Intent.getSerializableExtra(java.lang.String)' on a null object reference 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                       at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:135) 
                       at android.app.ActivityThread.main(ActivityThread.java:5254) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:372) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
                       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.Serializable android.content.Intent.getSerializableExtra(java.lang.String)' on a null object reference 
                       at com.example.kathe.parenttripapp.Details.<init>(Details.java:23) 
                       at java.lang.reflect.Constructor.newInstance(Native Method) 
                       at java.lang.Class.newInstance(Class.java:1606) 
                       at android.app.Instrumentation.newActivity(Instrumentation.java:1066) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  
                       at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:135)  
                       at android.app.ActivityThread.main(ActivityThread.java:5254)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at java.lang.reflect.Method.invoke(Method.java:372)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  

これはエラーがで発生するクラスです私がやりたい何

final ListView listView = (ListView) findViewById(R.id.viewAll_listview); 
    long count = Activitytable.count(Activitytable.class); 

    if(count>0) { 
     final List<Activitytable> activitytable = Activitytable.listAll(Activitytable.class); 
     final ViewAllListView madapter = new ViewAllListView(getApplicationContext(), activitytable); 
     listView.setAdapter(madapter); 
     listView.setClickable(true); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?>parent, View v, int position, long id) { 
       String title = activitytable.get(position).Title.toString(); 
       Activitytable AT = Activitytable.findById(Activitytable.class,activitytable.get(position).getId()); 
       Intent i = new Intent(getApplicationContext(),Details.class); 
       i.putExtra("listPosition",title); 
       startActivity(i); 

      } 
      public Object getItem(int position) {return position;} 
     }); 

    } 
     else 

      { 
       Toast.makeText(getApplicationContext(), "No Data Available in Table", Toast.LENGTH_LONG); 
      } 
     } 

が意図を置くことです:

これは、から来ている活動ですデータをTextView 'titletext'に挿入し、渡されたインテントデータがアクティビティタイトルと等しい場合は、ifステートメントを実行して、次のデータを表示しますが、間違っていることは解決できません。私はgetSerializableExtraの代わりにgetStringExtra()を使用しようとしましたが、そのような運がありません。トーストでは動作しますが、TextViewでは動作しません。

+0

@sihao助けてもらえますか? – kjones

+0

NullPointerExceptionsに関するこの質問は、何度も尋ねられています:http://stackoverflow.com/q/218384/1478764質問をする前に少し研究をしてください。 – chRyNaN

+0

あなたはIntentを持っていないので、 'getIntent()'はnullです。 –

答えて

1

行に詳細クラスでありますonCreateで、またNullPointerExceptionを防ぐために、if (variable != null)を使用するのは良い習慣です。

そして、あなたはint型を格納しているので、onCreate()getIntExtra

TextView titletext; 
List<Activitytable> activityTable; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_details); 

    activityTable = Activitytable.listAll(Activitytable.class); 
    titletext = (TextView) findViewById(R.id.titletext); 

    Intent i = getIntent(); 
    if (i != null) { 
     String data = i.getStingExtra("listPosition"); 
     titletext.setText(String.valueOf(data)); 
    } 
} 
+0

'getSerializableExtra'もnullを返すことができることを指摘することもできます。したがって、 'toString'を呼び出すと、NullPointerExceptionが発生する可能性があります。 – chRyNaN

+0

@chRyNaN 'getIntExtra'に変更しましたが、修正しました。 –

+0

( "listPosition")が好きではありません。listPositionが役立つ場合は、整数ではないテキストを表示するはずです。 **編集** getStringExtra( "listPosition")に変更されましたが、同じランタイムエラー(nullPointerException) – kjones

-1

あなたが受けているNULLポインタはあなたがそうしている理由のいくつかをよく理解していない場合は、あなたがされるまで、あなたの変数を初期化しないようにしよう23

at com.example.kathe.parenttripapp.Details.<init>(Details.java:23) 
0

を使用し、メンバ変数としてそれをしません。

Bundle intentBundle = getIntent().getExtras(); 
if (intentBundle != null) { 
     lastPosition = getInt("lastPostion"); 
} 
関連する問題