- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
异常
05-12 15:42:45.791 11043-11043/ E/UncaughtException: java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 631792 bytes
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3776)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
Caused by: android.os.TransactionTooLargeException: data parcel size 631792 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:615)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3700)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3768)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
05-12 15:42:47.247 11043-11043/ E/AndroidRuntime: FATAL EXCEPTION: main
Process: , PID: 11043
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 631792 bytes
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3776)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
Caused by: android.os.TransactionTooLargeException: data parcel size 631792 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:615)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3700)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3768)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
fragment OnItemClick:-
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Bundle bundle = new Bundle();
ProdModel mProdModel = prodList.get(position);
bundle.putSerializable("object", mProdModel);
Intent intent = new Intent(getActivity(), DetailActivity.class);
intent.putExtra("bundle", bundle);
startActivityForResult(intent, 1);
}
});
详细 Activity ,
Bundle bundle = getIntent().getBundleExtra("bundle");
if (bundle != null) {
ProdModel model = (ProdModel) bundle.getSerializable("object");
}
详细 Activity list ,
<activity
android:name="com.mass.mysample.DetailActivity"
android:screenOrientation="portrait" />
使用 Picasso 加载图像,
Picasso.with(this).load(model.getImage())
.placeholder(R.drawable.logo_without)
.fit().into(productimage);
模型类
public class ProdModel implements Serializable {
private String seller_id;
String name;
private String image;
private float price;
private float specialprice;
private String entity_id;
private String productNumQuantity;
private String storetitle;
private String description;
private String discount;
private String max_price;
private String store_name;
private String StoreUrl;
public String getProductNumQuantity() {
return productNumQuantity;
}
public void setProductNumQuantity(String productNumQuantity) {
this.productNumQuantity = productNumQuantity;
}
public String getDiscount() {
return discount;
}
public void setDiscount(String discount) {
this.discount = discount;
}
public String getMax_price() {
return max_price;
}
public void setMax_price(String max_price) {
this.max_price = max_price;
}
public String getStore_name() {
return store_name;
}
public void setStore_name(String store_name) {
this.store_name = store_name;
}
public String getStoreUrl() {
return StoreUrl;
}
public void setStoreUrl(String storeUrl) {
StoreUrl = storeUrl;
}
public String getStoretitle() {
return storetitle;
}
public void setStoretitle(String storetitle) {
this.storetitle = storetitle;
}
public String getSeller_id() {
return seller_id;
}
public void setSeller_id(String seller_id) {
this.seller_id = seller_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getEntity_id() {
return entity_id;
}
public void setEntity_id(String entity_id) {
this.entity_id = entity_id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public float getSpecialPrice() {
return specialprice;
}
public void setSpecialPrice(float specialprice) {
this.specialprice = specialprice;
}
}
从TabActivity到fragment的数据流,
1.I have a TabActivity with ViewPager and Fragment.
2.In Fragment, I have a ListView.
3.The Data to fragment is passed from view pager adapter by set arguments.
我尝试过的解决方案
1.A POJO class that implements Serialization.
2.I use Picasso to load the image from image URL.
3.This exception is thrown when OnItemClick on ListView in fragment passes data to DetailActivity to show all passed data.
4.I get this exception after the DetailActivity load's image and other data then app suddenly crashes.
5.I pass data in Intent was all POJO Object with Id, Name, Image URL, Price etc.,
注意:-应用程序崩溃仅在NOUGAT
最后,我实现的修复
将 targetSdkVersion 从 25 更改为 23
更改后,我的应用程序在 Nougat 中也没有崩溃。
我所需要知道的是这个正确的解决方案或者是否有任何解决方法。
请指导正确的方法。
提前致谢。
fragment
public class ProdFragment extends Fragment {
ListView listview;
SharedPreferences spref;
Boolean isInternetPresent = false;
ConnectionDetector cd;
private String toBeDisplayed,CatID;
private static final String TAG = ProdFragment.class.getSimpleName();
String totalProductCart;
private ArrayList<Root_SubCatModel> subCatList;
private ArrayList<ProdModel> prodList;
ProdAdapter adapter;
public ProdFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
spref = getActivity().getSharedPreferences(getResources().getString(R.string.myPref),
Context.MODE_PRIVATE);
Bundle bundle = getArguments();
if (bundle != null) {
int tabPosition = bundle.getInt("Tab_Position");
toBeDisplayed = bundle.getString("Tab_ToBeDisplayed");
CatID = bundle.getString("CategoryId");
subCatList = (ArrayList<Root_SubCatModel>) bundle.getSerializable("Tab_Data");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.prod_listview, container, false);
cd = new ConnectionDetector(getActivity());
listview = (ListView) rootView.findViewById(R.id.prodlist);
if (subCatList != null) {
adapter = new ProdAdapter(getActivity(),
CatID,
toBeDisplayed,
R.layout.list_product,
subCatList,
(ProductCartCountListener)getActivity());
listview.setAdapter(adapter);
adapter.notifyDataSetChanged();
prodList = new ArrayList<>();
for(int i = 0; i<subCatList.size();i++){
if (subCatList.get(i).getProd() != null) {
if(toBeDisplayed.equals("SubCategory")){
if (CatID.equals(subCatList.get(i).getCategory_id())) {
this.prodList = subCatList.get(i).getProd();
}
}else if(toBeDisplayed.equals("Products")) {
this.prodList = subCatList.get(i).getProd();
}
}
}
}
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Bundle bundle = new Bundle();
bundle.putSerializable("object", prodList.get(position));
Intent intent = new Intent(getActivity(), DetailActivity.class);
intent.putExtra("bundle", bundle);
startActivityForResult(intent,1);
}
});
return rootView;
}
public void showAlertDialog(Context context, String title, String message, Boolean status) {
AlertDialog alertDialog = new AlertDialog.Builder(context).create();
// Setting Dialog Title
alertDialog.setTitle(title);
// Setting Dialog Message
alertDialog.setMessage(message);
// Setting alert dialog icon
//alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail);
// Setting OK Button
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
// Showing Alert Message
alertDialog.show();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
Bundle b = data.getExtras();
if (b != null) {
ProdModel myobj = (ProdModel) b.getSerializable("Cart_Quantity");
if (myobj != null) {
if (prodList != null) {
for (ProdModel P : prodList) {
if (P.getEntity_id().equals(myobj.getEntity_id())) {
P.setProductNumQuantity(myobj.getProductNumQuantity());
}
}
}
Log.d(TAG,"Product_Id : " + myobj.getEntity_id()
+ ", Product_Cart_Count : " + myobj.getProductNumQuantity());
}
}
} else if (resultCode == 0) {
Log.d(TAG,"RESULT CANCELLED");
}
}
adapter.notifyDataSetChanged();
String totalProductCart = spref.getString("Cart_Count_Tool", "0");
Activity activity = getActivity();
if(activity instanceof TabActivity){
TabActivity myActivity = (TabActivity) activity;
Toolbar toolbar = (Toolbar) myActivity.findViewById(R.id.back_toolbar);
ImageView cart_imageview = (ImageView) toolbar.findViewById(R.id.cart_imageview);
cart_imageview.setImageDrawable(myActivity.buildCounterDrawable(
Integer.parseInt(totalProductCart)));
}
Log.d(TAG,"RESULT NOTIFIED");
}
public void refreshData(String productId, boolean isAddAsyncTaskComplete,
boolean isAddAsyncTaskLimitReached, boolean isDeleteAsyncTaskComplete){
adapter.setQuantityCount(prodList, productId, isAddAsyncTaskComplete,
isAddAsyncTaskLimitReached, isDeleteAsyncTaskComplete);
}
选项卡 Activity 布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/storeimage"
android:textAlignment="center"
android:elevation="2dp"
android:minHeight="?attr/actionBarSize"
app:tabMode="scrollable"
app:tabTextColor="@color/color_dark_blue"
app:tabSelectedTextColor="@color/color_orange"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
ListView
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/prodlist"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
最佳答案
您在 setArguments()
中向 Fragment
传递了太多数据。您的 Fragment
可以工作,但是当它尝试保存其实例状态时,它会溢出事务缓冲区。如果您的目标平台是 Android 7.0(API 24 或更高版本),这会引发 RuntimeException
。为了保持向后兼容性并且不破坏现有应用程序,仅当您以 API 24 或更高版本为目标时才会使用新行为。如果您的目标 API < 24,则会捕获事务缓冲区溢出异常并静默忽略。这意味着您的数据不会被持久保存,您可能会(也可能不会)注意到这一点。
您的代码已损坏。您不应将大量数据传递给 setArguments()
中的 Fragment
。您可以将数据保存在Activity
中。当 Fragment
想要访问数据时,它总是可以这样:
// Get the owning Activity
MyActivity activity = (MyActivity)getActivity();
// Get the data from the Activity
List<Data> data = activity.getData();
在您的 Activity
中,编写一个 getData()
方法,该方法返回对 Fragment
所需的任何数据的引用。
通过这种方式,数据保存在Activity
中,并且Fragment
可以在需要时访问它。
关于android - 牛轧糖中的 TransactionTooLargeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43937166/
对于NumericVector ,我可以将一个较小的 NumericVector 进行子集化通过使用 IntegerVector包含要子集化的位置。 例如假设x<-c(1,2,2,3,4,5) , i
我的 javascript 文件以配置开始... require.config({ baseUrl: 'scripts', paths: { 'code-mirror'
我的应用程序应该可以使用插件或通常称为糖的方式进行扩展。我会将它们放在 appname.app/Contents/sugars/sugarname.appnamesugar 下 这些是 bundle
我一直在尝试使用 Rcpp 在 C++ 中获取 vector 的等级。我使用了其他糖功能,例如 is_na(); C++中rank R函数有没有类似的糖函数。 Rcpp/ 中是否还有任何可用的 R 糖
我通过 Android Studio 使用 Sugar ORM 进行 Android 开发。 但我想我有一个非常相似的问题。如何将一个/多个结果查询显示为字符串或整数?我的实体看起来像这样: publ
入门读物: Prototypes as "classes" OO JS 按照上述模式,我创建如下库/API var Proto = { constructor: function () {
我在应用程序的第一个版本中使用了 SugarORM。现在,我正在开发第二个版本,它向数据库中添加了新表。 根据 SugarORM documentation “Sugar 会自动为新实体创建表,因此您
我是一名优秀的程序员,十分优秀!