如何使用logcat修复此错误?

时间:2013-11-25 08:16:59

标签: java android logcat

此报告是在我的google play开发者控制台中提交的。 我的应用程序的完整代码大约是5000行,所以我无法全部上传...

如何解决这个奇怪的错误?我在logcat中找不到任何东西。

java.lang.RuntimeException: Unable to start activity ComponentInfo{pe.kmh.fm/pe.kmh.fm.MainActivity}: java.lang.RuntimeException: Parcel android.os.Parcel@412eb278: Unmarshalling unknown type code 2131034166 at offset 652
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
at android.app.ActivityThread.access$600(ActivityThread.java:162)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5371)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@412eb278: Unmarshalling unknown type code 2131034166 at offset 652
at android.os.Parcel.readValue(Parcel.java:2032)
at android.os.Parcel.readSparseArrayInternal(Parcel.java:2255)
at android.os.Parcel.readSparseArray(Parcel.java:1687)
at android.os.Parcel.readValue(Parcel.java:2022)
at android.os.Parcel.readMapInternal(Parcel.java:2226)
at android.os.Bundle.unparcel(Bundle.java:223)
at android.os.Bundle.getSparseParcelableArray(Bundle.java:1240)
at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1655)
at android.app.Activity.onRestoreInstanceState(Activity.java:938)
at com.actionbarsherlock.app.SherlockActivity.onRestoreInstanceState(Unknown Source)
at android.app.Activity.performRestoreInstanceState(Activity.java:910)
at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1133)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2321)
... 11 more

编辑:添加Parcelable代码。 - SearchedFileProperty Class

package pe.kmh.fm.prop;

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

public class SearchedFileProperty extends FileProperty implements Parcelable {

    private String FilePath;

    public SearchedFileProperty(String _icon, String _name, String _date, String _size, String _path) {
        super(_icon, _name, _date, _size);
        FilePath = _path;
    }

    public SearchedFileProperty(Parcel in) {
        readFromParcel(in);
    }

    public String getPath() {
        return FilePath;
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(super.getIcon());
        dest.writeString(super.getName());
        dest.writeString(FilePath);
        dest.writeString(super.getDate());
        dest.writeString(super.getSize());
    }

    public void readFromParcel(Parcel in) {
        super.setIcon(in.readString());
        super.setName(in.readString());
        FilePath = in.readString();
        super.setDate(in.readString());
        super.setSize(in.readString());
    }

    public static final Parcelable.Creator<SearchedFileProperty> CREATOR = new Parcelable.Creator<SearchedFileProperty>() {

        @Override
        public SearchedFileProperty createFromParcel(Parcel source) {
            return new SearchedFileProperty(source);
        }

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

    };
}
  • 此类用于SearchActivity,如此

    ArrayList文件列表; filelist = intent.getParcelableArrayListExtra(“filelist”);

  • 在MainActivity中,调用SearchActivity,如:

    //搜索工作后(此应用为文件管理员) Intent searchActivity = new Intent(MainActivity.this,SearchActivity.class);                             searchActivity.putParcelableArrayListExtra(“filelist”,arr);                             startActivity(searchActivity);

3 个答案:

答案 0 :(得分:0)

根据您的堆栈跟踪,

看起来,您正在尝试readValue并以不同类型存储。

实施例

long _id = source.readInt(); // This is wrong

long _id = source.readLong(); // This is correct

答案 1 :(得分:0)

There are tools in idea (IntelliJ) 可以为您生成parcelable。只是尝试在此类上重新生成Parcelable代码,您将收到错误。

答案 2 :(得分:0)

修正了它。

问题在于Proguard,所以我在proguard-project.txt中添加了这些行:

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

然后错误完美修复!

感谢您的回答。