当前位置: 首页 > 知识库问答 >
问题:

Android:自定义可打包类崩溃应用程序而不会抛出异常

章哲彦
2023-03-14

我有一个Android应用程序,它带有自定义对象,实现了可Parcelable接口。我设置它的方法是,我的程序最初从包中的文件创建一个自定义类productsArrayList。我可以看到并确认arraylist和它的实例变量被适当地填充。这个类有几个实例变量,其中一个是另一个ArrayList,但带有String类。记住这个事实。

我正在尝试将ArrayList 传递到一个新活动中,如下所示:

  try {
         Intent i = new Intent(RootActivity.this, ProductsActivity.class);     //Intent from this activity to the next
         i.putParcelableArrayListExtra("Products", app_products);              //Puts my ArrayList<Class A> as an extra
         startActivity(i);                                                     //Launch the activity

       }
       catch(Exception e){
           Log.d("Activity Error", "Error Here:" + e.getMessage());
       }

我正在收集新活动中的意图返回的信息,方法是使用以下方法取出arraylist

     app_products = getIntent().getParcelableArrayListExtra("Products");
public class Product implements Parcelable{
      private String name;
      private String cost;
      private ArrayList<String> similarItems;

      public Product{
            name = null;
            cost = null;
            similarItems = new ArrayList<String>();
      }

     public Product(String name, String cost){
            this();
            this.name = name;
            this.cost = cost;
     }

     public addSimilarItem(String item){
            similarItems.add(item);
     }

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

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

    public int describeContents(){
          return 0;
    }

    private Product(Parcel in){
         name = in.readString();
         cost = in.readString();
         similarItems = in.readArrayList(String.class.getClassLoader());
    }

    public void writeToParcel(Parcel out, int flags){
         out.writeString(name);
         out.writeString(cost);
         out.writeList(similarItems);
    }
}

因此这可以很好地工作而不在类中添加我的String arraylist

注释掉out.writeList(similarItems);以及similarItems=In.ReadArrayList(String.Class.GetClassLoader());

但是一旦您将它们重新添加到类中,应用程序就会崩溃,但它甚至不会抛出一条用于调试的消息。我已经围绕try-catch语句进行了所有的工作,而android甚至没有报告应用程序在跳板上的正常对话框中崩溃。我真的不知所措。

如果我能提供任何额外的信息,请告诉我。

共有1个答案

沈俊晤
2023-03-14

可以肯定的是,您的问题是使用writeList()WriteList()似乎表明,对于列表中包含的项,它遵循与WriteValue()相同的约定。然而,readlist()似乎表明这些值必须是parcelable(string不是)。

不管是哪种方式,这些调用通常都必须非常具体地链接到它们的反向调用(例如,writeString()必须用readString()读入,而不是readValue()),因此您应该使用提供的方法来读/写stringlist:

// Takes in a List<String> which may be null
out.writeStringList(similarItems);

// Returns either null or a new ArrayList<String> with the contents
similarItems = in.createStringArrayList();
 类似资料:
  • 在以前的代码上,谁医生帮了我 现在,android应用程序在我的手机上运行时崩溃了,这是错误日志 第一个问题是在我用相机扫描二维码后,它不能显示在二维码的结果进入 第二个问题是,我从存储器中选择了一个QRcode图像,然后点击确认,它崩溃了 下面是我认为的问题 类型不匹配:推断的类型是Uri?但乌里是意料之中的 冗余SAM构造函数 'onRequestPermissionsResult(Int,数

  • 当我尝试更新应用程序时,应用程序崩溃了。在我们的应用程序中,我们正在缓存中保存更新的版本,然后尝试从缓存中安装应用程序。应用程序由于android.os.fileuriexposedexception而崩溃。我发现通过intent.getData()在应用程序之外公开了日志android.os.fileuriexposedexception:file:///storage/emulated/0/t

  • 不管怎样,我一直在Nexus 5中使用LG G watch,但几天后,Android Wear应用程序不断崩溃,即我一遍又一遍地收到“Android Wear意外停止”的对话框。它到了我不得不卸载Wear应用程序的地步,从而使戴G手表变得毫无意义!立即重新安装应用程序会导致同样的结果。几天后我重新安装了应用程序(看到更新已经被推送),它很好,但几天后:同样的事情发生了。 logcat输出显示: E

  • 本文向大家介绍Java抛出异常与自定义异常类应用示例,包括了Java抛出异常与自定义异常类应用示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java抛出异常与自定义异常类。分享给大家供大家参考,具体如下: 异常处理常用方法: 常用的异常处理方法有: 一、try()catch() 语句 二、throw / throws 语句 三、自定义异常类 用途: 众所周知,当程序运行过程中,如果遇

  • 我有以下代码,试图在ListView中创建一个简单的ListAdapter(我以前使用过这段代码,这是我唯一更改内容的地方): 当单步执行时,什么都不会发生,但当运行时,我在ChoreoGrapher中得到了一个null点异常。doCallbacks,当我创建一个空的数组列表时,它不会崩溃: 什么是编舞,为什么它会使我的应用程序崩溃? 我完全被困在可能的问题上,或者如何找出问题所在。Eclipse