2016-04-05 10 views
0

Veri tabanındaki verileri liste görünümünde görüntülemek için bir uygulama yapıyorum. Liste görünümündeki bir öğe tıklandığında, kullanıcıyı o öğe hakkında daha fazla ayrıntı görebilecekleri yeni bir etkinliğe götürür. Detayları görüntülemek için detaylar sayfasını dinamik hale getirmek istiyorum ve liste görünümü öğesinin başlığını bir tost içinde göstermeyi başardım. ŞimdiBir TextView - NullPointerException hatada geçirilen niyet verisi nasıl görüntülenir

, bir dizede başlığını göstermek için setText() kullanarak bunu göstermek için çalışıyorum ama hata alıyorum:

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)  

bu hata meydana sınıftır Ben yapmak istiyorum ne

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

niyet koymaktır:

Bu gelmiştir faaliyettir Verileri TextView 'titletext' dosyasına girin ve iletilen niyet verisinin bir etkinlik başlığına eşit olup olmadığını, ardından aşağıdaki verileri görüntülediğini, ancak neyin yanlış gittiğini çözemediğini söyleyen bir if deyimi yapın. GetSerializableExtra yerine getStringExtra() kullanmayı denedim ama böyle bir şans yok. Tost üzerinde çalışıyor ancak TextView'da çalışmıyor. Eğer bunu yaparken neden bazı iyi bir anlayışa sahip değilseniz

+0

@sihao Yardımcı olabilir misiniz? – kjones

+0

NullPointerExceptions hakkında bu soruya birçok kez sorulmuştur: http://stackoverflow.com/q/218384/1478764. Lütfen bir soru sormadan önce biraz araştırma yapın. – chRyNaN

+0

Niyetiniz yok, bu nedenle 'getIntent()' null. –

cevap

1

, sen kadar değişkenlerini başlatmak çalış onCreate, ayrıca bir NullPointerException önlemek için if (variable != null) kullanmak için iyi bir alışkanlıktır.

Ve bir int depolamak, bu nedenle onCreate() yılında 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

Ayrıca 'getSerializableExtra' null de döndürebileceğine dikkat çekmek isteyebilirsiniz. Yani, toString'e yapılan bir çağrı da bir NullPointerException neden olabilir. – chRyNaN

+0

@chRyNaN 'getIntExtra' olarak değiştirdim, ancak düzeltdim. –

+0

("listPosition") 'ı beğenmez - eğer bu yardımcı olursa, listPosition metnini tamsayı değil göstermesi gerektiğini işaret etmek iyi olabilir mi? ** Edit ** getStringExtra ("listPosition") olarak değiştirildi ancak hala aynı çalışma zamanı hatası (nullPointerException) – kjones

-1

aldığınız boş işaretçi hattında Detaylar sınıfta 23

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

kullanabilir ve üye değişkeni olarak bunu yapmayın.

Bundle intentBundle = getIntent().getExtras(); 
if (intentBundle != null) { 
     lastPosition = getInt("lastPostion"); 
}