【问题标题】:How do I send Serialized data from one activity to another activity recyclerview如何将序列化数据从一个活动发送到另一个活动 recyclerview
【发布时间】:2018-01-24 11:18:20
【问题描述】:

如何将数据从一个活动发送到另一个活动 recyclerview 适配器。 我正在使用改造 2 获取数据并通过 put extra 发送它,这里出现错误无法沼泽

private void callApigetCategoryItems() {
    ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
    Call<CategoryResponse> call = apiService.getCategoryResult(1);
    call.enqueue(new Callback<CategoryResponse>() {
        @Override
        public void onResponse(Call<CategoryResponse> call, Response<CategoryResponse> response) {
            List<ProductsItem> products = response.body().getData().getProducts();
            for (int i = 0; i < products.size(); i++) {
                String stockCategoryName = products.get(i).getStockCategoryName();
                Toast.makeText(HomeActivity.this, "" + stockCategoryName, Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(getApplicationContext(), SearchActivity.class);
                intent.putExtra("category", (Serializable) products);
                startActivity(intent);
            }
        }

        @Override
        public void onFailure(Call<CategoryResponse> call, Throwable t) {
            Toast.makeText(HomeActivity.this, "" + t.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
}

List<ProductsItem> productsItemList = (List<ProductsItem>) getIntent().getSerializableExtra("category");

错误:进程:com.adverscribe.bookyourstock,PID:18514 java.lang.RuntimeException:包裹:无法封送值 ProductsItem{stock_division_id = '0',cover_status = '1',listing_image_color_id = '3',listing_id = '4',listing_detail_id = '3',stock_fit_id = '0',frabic_blend_mix = '',seller_brand_id = '0',listing_size_id = '4',vendor_style_no = 'ABCD',stock_size_status = '1',style_discription = 'AV',total_stock = '2',size_created_date = '2018-01-12 12:25:48',stock_color_id = '1',stock_pattern_id = '0',stock_subcategory_status = '1',listing_status = '0',seller_id = '1',product_usp = '',stock_color_status = '1',stock_size_name = 'M',listing_updated_date = '2018-01-23 09:20:48',stock_category_name = 'T 恤',stock_size_id = '4',stock_division_name = '男士',mrp = '550',stock_quantity = '1',stock_sleeve_id = '0',stock_subcategory_id = '1',stock_fabric_id = '0',stock_start_date = '2017-12-22',stock_subcategory_name = 'Polo',active_status = '0',color_id = '1',stock_color_name = '白色',stock_wash_id = '0',image_path = 'assets/1/image_01232018162048952300.png',stock_division_status = '1',stock_end_date = '2017-12-22',size_update_date = '2018-01-12 12:25:48',stock_category_id = '1',created_date = '2018-01-12 12:01:11',updated_date = '2018-01-12 12:01:11',stock_category_status = '1',fob_cost = '520',seller_location_id = '1',listing_created_date = '2018-01-23 09:20:48'} 在 android.os.Parcel.writeValue(Parcel.java:1477) 在 android.os.Parcel.writeList(Parcel.java:812) 在 android.os.Parcel.writeValue(Parcel.java:1424) 在 android.os.Parcel.writeArrayMapInternal(Parcel.java:724) 在 android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408) 在 android.os.Bundle.writeToParcel(Bundle.java:1157) 在 android.os.Parcel.writeBundle(Parcel.java:764) 在 android.content.Intent.writeToParcel(Intent.java:8762) 在 android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3172) 在 android.app.Instrumentation.execStartActivity(Instrumentation.java:1520) 在 android.app.Activity.startActivityForResult(Activity.java:4318) 在 android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67) 在 android.app.Activity.startActivityForResult(Activity.java:4276) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720) 在 android.app.Activity.startActivity(Activity.java:4615) 在 android.app.Activity.startActivity(Activity.java:4583) 在 com.adverscribe.bookyourstock.activities.HomeActivity$3.onResponse(HomeActivity.java:119) 在 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6349) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)

【问题讨论】:

    标签: android retrofit


    【解决方案1】:

    ProductsItem 类是否可序列化?如果不是,它将不会序列化并会在运行时抛出错误。使ProductsItem类实现java.io.Serializable接口

    【讨论】:

      【解决方案2】:

      首先,您必须像这样创建可序列化的类,而不是将产品转换为可序列化的:

      public class ProductsItem implements Serializable{
      .
      .
      .
      }
      

      通过意图发送数据:

      intent.putExtra("category", products);
      

      在目标活动中使用它来获取数据:

      List<ProductsItem> items=
                     (List<ProductsItem>)getIntent.getSerializable("caregory");
      

      【讨论】:

        【解决方案3】:

        类的可序列化性由实现 java.io.Serializable 接口的类启用。未实现此接口的类将不会对其任何状态进行序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于识别可序列化的语义。

        你需要序列化你的 ProductsItem 类

        public class ProductsItem implements Serializable
        

        虽然发送您的可序列化对象是有意使用

        intent.putExtra("PRODUCT_ITEM", products);
        

        检索内容使用

        List<ProductsItem> productItemList=
                       (List<ProductsItem>)getIntent.getSerializable("PRODUCT_ITEM");
        

        虽然 Parcelable 更适合序列化。 Parcelable 在 Android SDK 中有很好的记录;另一方面,序列化在 Java 中可用。正是出于这个原因,Android 开发人员更喜欢 Parcelable 而不是序列化技术。

        · 在 Parcelable 中,开发人员编写用于编组和解组的自定义代码,因此与序列化相比,它创建的垃圾对象更少。由于这种自定义实现,Parcelable over Serialization 的性能显着提高(大约快了两倍)。

        · 序列化是一个标记接口,这意味着用户不能根据他们的要求来编组数据。在序列化中,使用 Java 反射 API 在 Java 虚拟机 (JVM) 上执行封送操作。这有助于识别 Java 对象的成员和行为,但最终也会创建大量垃圾对象。因此,与 Parcelable 相比,序列化过程很慢

        【讨论】:

          猜你喜欢
          • 2020-02-11
          • 2019-07-31
          • 2017-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多