2017-04-18 49 views
-3

我創建了一個列表視圖。並添加了一個'OnItemClickListener()'。我正在傳遞一個意圖,並通過意圖傳遞一些數據。單擊列表視圖時,應用程序崩潰!爲什麼?

contactListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent intent = new Intent(MainActivity.this, ContactInfo.class); 
      Contact ParseContactID = contactAdapter.getItem(position); 

      intent.putExtra("ParseContactID", (Parcelable) ParseContactID); 

      startActivity(intent); 
    } 
}); 

而我正在檢索另一個類中的數據。

Intent intent = getIntent(); 
    Bundle cBundle = intent.getExtras(); 

    String ContactInfo = cBundle.getString("ParseContactID"); 

但是,當我嘗試點擊任何列表時,應用程序崩潰。這裏是 image of the appapp crash

日誌貓有一些致命的錯誤不知道如何解決這些問題。

04-18 10:33:22.547 3528-3528/cm0573.contactsapp.user.contactsapp E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: cm0573.contactsapp.user.contactsapp, PID: 3528 
                       java.lang.ClassCastException: cm0573.contactsapp.user.contactsapp.Contact cannot be cast to android.os.Parcelable 
                        at cm0573.contactsapp.user.contactsapp.MainActivity$4.onItemClick(MainActivity.java:135) 
                        at android.widget.AdapterView.performItemClick(AdapterView.java:299) 
                        at android.widget.AbsListView.performItemClick(AbsListView.java:1113) 
                        at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904) 
                        at android.widget.AbsListView$3.run(AbsListView.java:3638) 
                        at android.os.Handler.handleCallback(Handler.java:733) 
                        at android.os.Handler.dispatchMessage(Handler.java:95) 
                        at android.os.Looper.loop(Looper.java:136) 
                        at android.app.ActivityThread.main(ActivityThread.java:5017) 
                        at java.lang.reflect.Method.invokeNative(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:515) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                        at dalvik.system.NativeStart.main(Native Method) 

幫助!

+5

有什麼不清楚的異常消息:'java.lang.ClassCastException:cm0573.contactsapp.user.contactsapp.Contact不能轉換爲android.os.Parcelable'? –

+0

你想發送一個'聯繫人'或'字符串'嗎?你的代碼嘗試一個,但期望另一個。 –

+0

我最近添加了parselable。錯誤是在我添加之前。 –

回答

0

你把一個Contact物體插入額外的,但是當你解壓,你想獲得一個String。 A Contact對象和String對象不一樣。對?

您可以讓您的聯繫人類實現Serializable界面,然後您可以執行此操作。

Bundle bundle = new Bundle(); 
bundle.putSerializable("ParseContactID", ParseContactID); 
intent.putExtras(bundle); 

檢索數據,另一個類

Bundle bundle = getIntent().getExtras(); 
Contact contact = (Contact)bundle.getSerializable("ParseContactID"); 

或者,如果你想實現parcelable您可以閱讀This

public class ContactInfo extends AppCompatActivity { 

TextView ContactInfoFamily_Name; 
TextView ContactInfoFirst_Name; 
TextView ContactInfoHouse_Number_ ; 
TextView ContactInfoStreet_Name; 
TextView ContactInfoTown_; 
TextView ContactInfoCounty_; 
TextView ContactInfoPost_Code; 
TextView ContactInfoPhone_Number; 
DatabaseHandler dbHandler = new DatabaseHandler(getApplicationContext()); 


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

    ContactInfoFamily_Name = (TextView) findViewById(R.id.ContactInfoFamilyName); 
    ContactInfoFirst_Name = (TextView) findViewById(R.id.ContactInfoFirstName); 
    ContactInfoHouse_Number_ = (TextView) findViewById(R.id.ContactInfoHouseNumber); 
    ContactInfoStreet_Name = (TextView) findViewById(R.id.ContactInfoStreetName); 
    ContactInfoTown_ = (TextView) findViewById(R.id.ContactInfoTown); 
    ContactInfoCounty_ = (TextView) findViewById(R.id.ContactInfoCounty); 
    ContactInfoPost_Code = (TextView) findViewById(R.id.ContactInfoPostCode); 
    ContactInfoPhone_Number = (TextView) findViewById(R.id.ContactInfoPhone); 


    Intent intent = getIntent(); 
    Bundle cBundle = intent.getExtras(); 

    Contact ContactInfo = (Contact) cBundle.getSerializable("ParseContactID"); 

    ContactInfoFamily_Name.setText(ContactInfo.getID()); 
    ContactInfoFirst_Name.setText(getIntent().getExtras().getString("FirstNameKey")); 
    ContactInfoHouse_Number_.setText(getIntent().getExtras().getString("HouseNumberKey")); 
    ContactInfoStreet_Name.setText(getIntent().getExtras().getString("StreetNameKey")); 
    ContactInfoTown_.setText(getIntent().getExtras().getString("TownKey")); 
    ContactInfoCounty_.setText(getIntent().getExtras().getString("CountyKey")); 
    ContactInfoPost_Code.setText(getIntent().getExtras().getString("TownKey")); 
    ContactInfoPhone_Number.setText(getIntent().getExtras().getString("PhoneNumberKey")); 


} 
} 
+0

我做了你說的確切的事情。現在logcat給我多空行指針異常 –

+0

檢查你的聯繫對象是否爲空。你能告訴我你的日誌嗎? – CodeCameo

+0

http://i68.tinypic.com/4gj6sg.png –

0

在你的班級Contact使它實現Serializable

public class Contact implements Serializable{ 

} 
0
  1. 確保您Contact類實現Parcelable

    public class Contact implements Parcelable { 
    
        ........... 
        ............... 
    } 
    
  2. 發送如下ContactContactInfo活動:

    Intent intent = new Intent(MainActivity.this, ContactInfo.class); 
    Contact contact = contactAdapter.getItem(position); 
    
    intent.putExtra("ParseContactID", contact); 
    startActivity(intent); 
    
  3. 檢索ContactContactInfo活性的影響。

    Contact contact = (Contact) getIntent().getParcelableExtra("ParseContactID"); 
    

這裏是不錯的Tutorial關於使用Parcelable

希望這將有助於〜

+0

我實現了serializable,但現在logcat給了我一個空指針異常。 [IMG] http://i68.tinypic.com/4gj6sg.png [/ IMG] –

+0

你可以請你發佈你的聯繫課程嗎? – FAT

+0

你想要哪一部分?我可以全部上傳。 –

0

的ContactInfo類 -

package cm0573.contactsapp.user.contactsapp; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class ContactInfo extends AppCompatActivity { 

TextView ContactInfoFamily_Name = (TextView) findViewById(R.id.ContactInfoFamilyName); 
TextView ContactInfoFirst_Name = (TextView) findViewById(R.id.ContactInfoFirstName); 
TextView ContactInfoHouse_Number_ = (TextView) findViewById(R.id.ContactInfoHouseNumber); 
TextView ContactInfoStreet_Name = (TextView) findViewById(R.id.ContactInfoStreetName); 
TextView ContactInfoTown_ = (TextView) findViewById(R.id.ContactInfoTown); 
TextView ContactInfoCounty_ = (TextView) findViewById(R.id.ContactInfoCounty); 
TextView ContactInfoPost_Code = (TextView) findViewById(R.id.ContactInfoPostCode); 
TextView ContactInfoPhone_Number = (TextView) findViewById(R.id.ContactInfoPhone); 
DatabaseHandler dbHandler = new DatabaseHandler(getApplicationContext()); 


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

    Intent intent = getIntent(); 
    Bundle cBundle = intent.getExtras(); 

    Contact ContactInfo = (Contact) cBundle.getSerializable("ParseContactID"); 

    ContactInfoFamily_Name.setText(ContactInfo.getID()); 
    ContactInfoFirst_Name.setText(getIntent().getExtras().getString("FirstNameKey")); 
    ContactInfoHouse_Number_.setText(getIntent().getExtras().getString("HouseNumberKey")); 
    ContactInfoStreet_Name.setText(getIntent().getExtras().getString("StreetNameKey")); 
    ContactInfoTown_.setText(getIntent().getExtras().getString("TownKey")); 
    ContactInfoCounty_.setText(getIntent().getExtras().getString("CountyKey")); 
    ContactInfoPost_Code.setText(getIntent().getExtras().getString("TownKey")); 
    ContactInfoPhone_Number.setText(getIntent().getExtras().getString("PhoneNumberKey")); 


} 
} 
相關問題