首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Parcelable类在重新进入应用程序后导致"Unmarshalling type code 33 at offset 172“错误

Parcelable类在重新进入应用程序后导致"Unmarshalling type code 33 at offset 172“错误
EN

Stack Overflow用户
提问于 2017-02-06 13:38:22
回答 2查看 292关注 0票数 0

我已经试着添加了这个

代码语言:javascript
复制
-keepclassmembers class * implements android.os.Parcelable {
static ** CREATOR;
}

添加到我的proguard-rules.pro文件,如下所示:Proguard causing RuntimeException (Unmarshalling unknown type code) in Parcelable class

这是我实现了parcelable的类,有没有可能导致这个错误的问题?我是否正确地处理了实现?

我只是在应用程序运行了很长一段时间并被操作系统终止后才得到错误和随后的强制关闭(但是如果我在多任务窗口中滑动,我就不会得到错误)。

代码语言:javascript
复制
public class WeatherData implements Parcelable{

public Condition condition = new Condition();
public Forecast forecast = new Forecast();
public Location location = new Location();

public WeatherData() {
    //empty
}

public static class Condition {
    public static String currentDescription;
    public static String date;
    public static int currentTemp;
}

public static class Forecast {
    public static List<Integer> tempMin = new ArrayList<>();
    public static List<Integer> tempMax = new ArrayList<>();
    public static List<String> description = new ArrayList<>();
    public static List<Integer> windSpeed = new ArrayList<>();
    public static List<String> dayOfWeek = new ArrayList<>();
    public static List<String> imageURL = new ArrayList<>();
}

public static class Location {
    public static String name;
}

public WeatherData(Parcel in) {
    //empty
}

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

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

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel parcel, int i) {
    //location
    parcel.writeString(Location.name);
    //condition
    parcel.writeString(Condition.currentDescription);
    parcel.writeString(Condition.date);
    parcel.writeInt(Condition.currentTemp);
    //forecast
    parcel.writeList(Forecast.tempMin);
    parcel.writeList(Forecast.tempMax);
    parcel.writeList(Forecast.description);
    parcel.writeList(Forecast.windSpeed);
    parcel.writeList(Forecast.dayOfWeek);
    parcel.writeList(Forecast.imageURL);
}

编辑:

下面是堆栈跟踪

代码语言:javascript
复制
E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                   Process: com.murraystudio.weatherapp, PID: 14219
                                                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.murraystudio.weatherapp/com.murraystudio.weatherapp.MainActivity}: java.lang.NullPointerException: Attempt to read from field 'com.murraystudio.weatherapp.datamodels.WeatherData$Condition com.murraystudio.weatherapp.datamodels.WeatherData.condition' on a null object reference
                                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
                                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                                                                                       at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                                                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                       at android.os.Looper.loop(Looper.java:154)
                                                                                       at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                                                    Caused by: java.lang.NullPointerException: Attempt to read from field 'com.murraystudio.weatherapp.datamodels.WeatherData$Condition com.murraystudio.weatherapp.datamodels.WeatherData.condition' on a null object reference
                                                                                       at com.murraystudio.weatherapp.WeatherFragment.updateWeatherUI(WeatherFragment.java:230)
                                                                                       at com.murraystudio.weatherapp.WeatherFragment.onCreateView(WeatherFragment.java:124)
                                                                                       at android.app.Fragment.performCreateView(Fragment.java:2353)
                                                                                       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:995)
                                                                                       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1171)
                                                                                       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1153)
                                                                                       at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2039)
                                                                                       at android.app.FragmentController.dispatchActivityCreated(FragmentController.java:176)
                                                                                       at android.app.Activity.performCreateCommon(Activity.java:6673)
                                                                                       at android.app.Activity.performCreate(Activity.java:6681)
                                                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                                                                                       at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                                                                                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                       at android.os.Looper.loop(Looper.java:154) 
                                                                                       at android.app.ActivityThread.main(ActivityThread.java:6119) 
                                                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
EN

回答 2

Stack Overflow用户

发布于 2017-02-06 14:22:46

你不能打包静态变量。将要打包的变量转换为非静态变量。

票数 1
EN

Stack Overflow用户

发布于 2017-02-06 14:31:01

当使用可打包或可序列化时,您的Pojo类(即WeatherData)、您发送包裹的位置和接收包裹的位置的类都应该扩展为可打包或可序列化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42060991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档