如何将数据从一个活动发送到另一个活动recyclelerview适配器。 我正在使用改装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:Parcel:无法编组值 ProductsItem {stock_division_id =&#39; 0&#39;,cover_status = &#39; 1&#39;,listing_image_color_id =&#39; 3&#39;,listing_id =&#39; 4&#39;,listing_detail_id = &#39; 3&#39;,stock_fit_id =&#39; 0&#39;,frabic_blend_mix =&#39;&#39;,seller_brand_id = &#39; 0&#39;,listing_size_id =&#39; 4&#39;,vendor_style_no =&#39; ABCD&#39;,stock_size_status = &#39; 1&#39;,style_discription =&#39; AV&#39;,total_stock =&#39; 2&#39;,size_created_date = &#39; 2018-01-12 12:25:48&#39;,stock_color_id =&#39; 1&#39;,stock_pattern_id = &#39; 0&#39;,stock_subcategory_status =&#39; 1&#39;,listing_status =&#39; 0&#39;,seller_id = &#39; 1&#39;,product_usp =&#39;&#39;,stock_color_status =&#39; 1&#39;,stock_size_name = &#39; M&#39;,listing_updated_date =&#39; 2018-01-23 09:20:48&#39;,stock_category_name = &#39; T恤&#39;,stock_size_id =&#39; 4&#39;,stock_division_name =&#39;男士&#39;,mrp = &#39; 550&#39;,stock_quantity =&#39; 1&#39;,stock_sleeve_id =&#39; 0&#39;,stock_subcategory_id =&#39; 1&#39;,stock_fabric_id =&#39; 0&#39;,stock_start_date =&#39; 2017-12-22&#39;,stock_subcategory_name =&#39; Polo&#39;,active_status = &#39; 0&#39;,color_id =&#39; 1&#39;,stock_color_name =&#39; White&#39;,stock_wash_id = &#39; 0&#39;,image_path = &#39; assets / 1 / image_01232018162048952300.png&#39;,stock_division_status = &#39; 1&#39;,stock_end_date =&#39; 2017-12-22&#39;,size_update_date =&#39; 2018-01-12 12:25:48&#39;,stock_category_id =&#39; 1&#39;,created_date =&#39; 2018-01-12 12:01:11&#39;,updated_date =&#39; 2018-01-12 12:01:11&#39;,stock_category_status = &#39; 1&#39;,fob_cost =&#39; 520&#39;,seller_location_id =&#39; 1&#39;,listing_created_date = &#39; 2018-01-23 09:20:48&#39;} 在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) at 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) at java.lang.reflect.Method.invoke(Native Method) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:893) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
答案 0 :(得分:0)
ProductsItem
类是否可序列化?如果没有,它将不会序列化并在运行时抛出错误。使ProductsItem
类实现java.io.Serializable
接口
答案 1 :(得分:0)
首先,不必将产品转换为Serializable,而是必须创建如下的可序列化类:
public class ProductsItem implements Serializable{
.
.
.
}
通过意图发送数据:
intent.putExtra("category", products);
在目的地活动中使用它来获取数据:
List<ProductsItem> items=
(List<ProductsItem>)getIntent.getSerializable("caregory");
答案 2 :(得分:0)
实现java.io.Serializable接口的类启用了类的可序列化。未实现此接口的类将不会将其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
您需要序列化ProductsItem类
public class ProductsItem implements Serializable
发送可序列化对象时,意图使用
intent.putExtra("PRODUCT_ITEM", products);
要检索内容,请使用
List<ProductsItem> productItemList=
(List<ProductsItem>)getIntent.getSerializable("PRODUCT_ITEM");
虽然Parcelable对于序列化来说要好得多。可以在Android SDK中详细记录Parcelable;另一方面,序列化在Java中可用。正是由于这个原因,Android开发人员更喜欢Parcelable而不是Serialization技术。
·在Parcelable中,开发人员编写用于编组和解组的自定义代码,因此与序列化相比,它创建的垃圾对象更少。由于这种自定义实现,Parcelable over Serialization的性能显着提高(大约快两倍)。
·序列化是一种标记接口,这意味着用户无法根据需要编组数据。在序列化中,使用Java反射API在Java虚拟机(JVM)上执行编组操作。这有助于识别Java对象成员和行为,但最终还是会创建大量垃圾对象。因此,与Parcelable
相比,序列化过程很慢