2017-08-21 9 views
0

Latlngを含む別のアクティビティにclassオブジェクトを送信したいと思います。しかし例外です。以下はlatlngフィールドを持つ私のクラスです。パーサブルクラスにlatlongオブジェクトを配置する方法

import android.os.Parcel; 
import android.os.Parcelable; 
import android.support.annotation.Keep; 
import com.google.android.gms.maps.model.LatLng; 
import java.io.Serializable; 

public class Institute implements Serializable,Parcelable { 

private String instituteName; 
private LatLng latLng; 

protected Institute(Parcel in) { 
    instituteName = in.readString(); 
    latLng = in.readParcelable(LatLng.class.getClassLoader()); 

} 

    public static final Creator<Institute> CREATOR = new Creator<Institute>() { 
    @Override 
    public Institute createFromParcel(Parcel in) { 
     return new Institute(in); 
    } 

    @Override 
    public Institute[] newArray(int size) { 
     return new Institute[size]; 
    } 
}; 


@Override 
public void writeToParcel(Parcel parcel, int i) { 

    parcel.writeString(instituteName); 
    parcel.writeParcelable(latLng,PARCELABLE_WRITE_RETURN_VALUE); 

} 

    public String getInstituteName() { 
    return instituteName; 
} 

public void setInstituteName(String instituteName) { 
    this.instituteName = instituteName; 
} 

    public void setLatLng(LatLng latLng) { 
    this.latLng = latLng; 
} 

    public LatLng getLatLng() { 
    return latLng; 
} 


} 

そして、それは例外

FATAL EXCEPTION: main 
    Process: in.thoughtsmith.jink, PID: 24906 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{in.thoughtsmith.jink/in.thoughtsmith.jink.InstituteDetails}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: Seed0004 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.access$900(ActivityThread.java:150) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: Seed0004 
    at android.os.Parcel.readParcelableCreator(Parcel.java:2432) 
    at android.os.Parcel.readParcelable(Parcel.java:2358) 
    at in.thoughtsmith.jink.Institute.<init>(Institute.java:45) 
    at in.thoughtsmith.jink.Institute$1.createFromParcel(Institute.java:55) 
    at in.thoughtsmith.jink.Institute$1.createFromParcel(Institute.java:52) 
    at android.os.Parcel.readParcelable(Parcel.java:2367) 
    at android.os.Parcel.readValue(Parcel.java:2264) 
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2614) 
    at android.os.BaseBundle.unparcel(BaseBundle.java:221) 
    at android.os.Bundle.getParcelable(Bundle.java:786) 
    at in.thoughtsmith.jink.InstituteDetails.onCreate(InstituteDetails.kt:34) 
    at android.app.Activity.performCreate(Activity.java:6285) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
    at android.app.ActivityThread.access$900(ActivityThread.java:150)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:148)  
    at android.app.ActivityThread.main(ActivityThread.java:5417)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

次は私を与えるどのように私は別のアクティビティへのLatLng含むクラスを送信することができ、私を助けてください。そしてまた同じ

答えて

0

あなたは次にあなたはParcelable

+1

号のLatLngが送信され、などparcelable –

+0

@EmanuelSeiboldを読み取ることができParcelableを実装し、正確 – FaisalAhmed

+0

どのようにあなたは私たちがここで話しているどのような緯度経度のクラスを知っていますか? –

0

問題にはeasely追加することができ緯度経度

double lat = latlng.latitude; 
double lng = latlng.longitude; 

からあなたの緯度と経度を抽出する必要が達成するために任意のより良い方法がある私に教えてくださいSerializableとParcelableを実装するということです。

Serializableは、データをシリアル化するために使用されます(より遅い非アンドロイドの方法)。 LatLngはパーセルブルを実装しているので、パーセルブルのみを使用してください。 ParcelableはSerializeableと似ていますが、シンプルなデータをシリアライズするより速い方法です。 Serializableは、LatLngの使い方を知らない。

LatLngは別のパッケージでも使用できるため、適切なインポートを使用してください。

writeToParcメソッドで使用されるフラグも使用する必要があります。意味:直列化とParcelable間

@Override public void writeToParcel(Parcel dest, int flags) { 
    parcel.writeString(instituteName); 
    parcel.writeParcelable(this.latLng, flags); 
} 

protected Institute(Parcel in) { 
    this.instituteName = in.readString(); 
    this.latLng = in.readParcelable(LatLng.class.getClassLoader()); 
} 
public class Institute implements Parcelable {} 

違い:Android: Difference between Parcelable and Serializable?

+0

私はこれをまだ試みました。それは私に同じ例外を与える – FaisalAhmed

+0

私の編集をチェックしてください。サンプルプロジェクトで試してみました。ご使用の輸入品で質問を編集してください。 –

関連する問題