2014-04-15 69 views
0

我已經創建了一個類象下面,實現ParcelableParcelable對象造成錯誤

package com.fyrweel.cityinfo; 

import android.os.Parcel; 
import android.os.Parcelable; 

public class JSONParser implements Parcelable { 

    public String fcodeName; 
    public String toponymName; 
    public String countrycode; 
    public String fcl; 
    public String fclName; 
    public String name; 
    public String wikipedia; 
    public Double lng; 
    public Double lat; 
    public String fcode; 
    public Long geonameId; 
    public Long population; 

    public int describeContents() { 
      return 0; 
     } 

     // write your object's data to the passed-in Parcel 
     public void writeToParcel(Parcel out, int flags) { 
      out.writeString(fcodeName); 
      out.writeString(toponymName); 
      out.writeString(countrycode); 
      out.writeString(fcl); 
      out.writeString(fclName); 
      out.writeString(name); 
      out.writeString(wikipedia); 
      out.writeString(fcode); 
      out.writeLong(geonameId); 
      out.writeLong(population); 
      out.writeDouble(lng); 
      out.writeDouble(lat); 
     } 

     public static final Parcelable.Creator<JSONParser> CREATOR = new Parcelable.Creator<JSONParser>() { 
      public JSONParser createFromParcel(Parcel in) { 
       return new JSONParser(in); 
      } 

      public JSONParser[] newArray(int size) { 
       return new JSONParser[size]; 
      } 
     }; 

     JSONParser(Parcel in) { 
      fcodeName = in.readString(); 
      toponymName = in.readString(); 
      countrycode = in.readString(); 
      fcl = in.readString(); 
      fclName = in.readString(); 
      name = in.readString(); 
      wikipedia = in.readString(); 
      fcode = in.readString(); 
      geonameId = in.readLong(); 
      population = in.readLong(); 
      lng = in.readDouble(); 
      lat = in.readDouble(); 
     } 

} 

然後我試圖從一個活動通過這個類的一個對象到另一個使用意圖。在第一個活動,我用下面的代碼:

Intent detailsActivityLauncher = new Intent(MainActivity.this, DetailsActivity.class); 
detailsActivityLauncher.putExtra("SelectedCityDetails", (Parcelable)aCity); 
startActivityForResult(detailsActivityLauncher, 0); 

而在第二個活動將下面的代碼來接受它:

Intent recievedIntent = getIntent();   
JSONParser theCity = (JSONParser)recievedIntent.getParcelableExtra("SelectedCityDetails"); 

當第二次活動負載,獲得的logcat以下錯誤: JSONParser.java的

04-15 15:50:03.680: E/AndroidRuntime(2958): FATAL EXCEPTION: main 
04-15 15:50:03.680: E/AndroidRuntime(2958): Process: com.fyrweel.cityinfo, PID: 2958 
04-15 15:50:03.680: E/AndroidRuntime(2958): java.lang.NullPointerException 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at com.fyrweel.cityinfo.JSONParser.<init>(JSONParser.java:55) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at com.fyrweel.cityinfo.MainActivity$1.onSuccess(MainActivity.java:66) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at com.loopj.android.http.AsyncHttpResponseHandler.onSuccess(AsyncHttpResponseHandler.java:232) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at com.loopj.android.http.AsyncHttpResponseHandler.onSuccess(AsyncHttpResponseHandler.java:220) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at com.loopj.android.http.AsyncHttpResponseHandler.onSuccess(AsyncHttpResponseHandler.java:245) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:365) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:135) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at android.os.Handler.dispatchMessage(Handler.java:102) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at android.os.Looper.loop(Looper.java:136) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at java.lang.reflect.Method.invoke(Method.java:515) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
04-15 15:50:03.680: E/AndroidRuntime(2958):  at dalvik.system.NativeStart.main(Native Method) 

線55:

fcodeName = in.readString(); 

這是怎麼發生的?如何解決這個問題?

+0

由於某種原因,'recievedIntent.getParcelableExtra(「SelectedCityDetails」)'很可能返回'null'。在你試圖對它進行拆解之前,你應該確認你有一個額外的關鍵「SelectedCityDetails」**。或者使用調試器或者使用'if(recievedIntent.hasExtra(「SelectedCityDetails」){...' –

回答

0

試試這個:

JSONParser theCity = (JSONParser) getIntent().getExtras().getParcelable("SelectedCityDetails");

而且

detailsActivityLauncher.putExtra("SelectedCityDetails", aCity);

希望這有助於!

+0

沒有用處..當對象被分配值時,應用程序崩潰了。 –

+0

我認爲一切都很好代碼上面..你可以發佈其他代碼來獲得幫助.. –

+0

@HarikrishnanT是你的'SelectedCityDetails'數組列表? – GrIsHu