java.lang.RuntimeException: Parcel: невозможно маршалировать значение при намерении перехода от фрагмента окна просмотра к действию - PullRequest
0 голосов
/ 29 марта 2019

У меня есть одно занятие, которое реализует степперы.первый шаг - выберите 2 элемента, которые у меня есть, а затем передайте их на другой шаг, используя Serializable, и не возникает проблем со связью между первым шагом и вторым шагом.На третьем шаге он показывает результат, который сравнивает два элемента, которые я выбираю.Результат сравнения показывает растения, которые используются для обоих элементов.

каждый элемент имеет ингредиенты, и я показываю различия с расположением вкладок на последнем фрагменте (шаг 3).способ показа ингредиентов хорош, здесь нет проблем.Но когда я реализую намерение перейти на страницу, которая показывает подробную информацию об ингредиентах, она показывает Java.lang.RuntimeException: Parcel: неспособно маршалировать значение.Я использую putextra, чтобы отправить идентификаторы ингредиентов, которые у меня есть, в детали ингредиентов.Я использую представление переработчика для отображения всех ингредиентов и добавляю намерения в адаптер представления переработчика.Я использую то же самое на другой странице (но в этом примере я использую activty с макетом вкладки, а не фрагмент с макетом вкладки, как в этом случае), он работает отлично, и нет ошибки в parcelable.

это строкакода об отправке массива с использованием сериализуемого между шагом 1 и шагом 2

//send data     
Bundle bundle = new Bundle();
bundle.putSerializable("idJamu", (Serializable) chosenJamu);
step2fragment.setArguments(bundle);

//receive data
 final ArrayList<jamuModelComparison> idJamu =  (ArrayList<jamuModelComparison>)getArguments().getSerializable("idJamu");

здесь нет ошибки, потому что я могу показать данные на втором шаге, и это последний шаг, который вызывает макет вкладки

tabLayout = (TabLayout) view.findViewById(R.id.tablayoutComparisonJamu);
    viewPager = (ViewPager) view.findViewById(R.id.viewPagerComparisonJamu);

    viewPagerComparisonJamu adapter = new viewPagerComparisonJamu(getChildFragmentManager());

    tabPlantComparison1 comparisonJamu1 = new tabPlantComparison1();
    tabPlantComparisonJamu2 comparisonJamu2 = new tabPlantComparisonJamu2();

    Bundle bundle = new Bundle();
    bundle.putString("idjamu1",idjamu1);
    bundle.putString("idjamu2",idjamu2);



    comparisonJamu1.setArguments(bundle);
    comparisonJamu2.setArguments(bundle);

    adapter.addFragment(comparisonJamu1,"Jamu 1");
    adapter.addFragment(comparisonJamu2,"Jamu 2");
    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);

это раздел макета вкладки 1

Bundle bundle = this.getArguments();
        idHerbal = bundle.getString("idjamu1");
        getArguments().remove("idjamu1");
        Log.d("plantTab","idplant = "+ idHerbal);
        Log.d("tab 1 comparison","tab called = " + idHerbal);
        getIdCrude(idHerbal);
        recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview_plant_comparison_jamu1);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        adapter = new showsPlantAdapter(crudeModels,getActivity());
        recyclerView.setAdapter(adapter);

это раздел макета вкладки 2

crudeModels = new ArrayList<>();
        Bundle bundle = this.getArguments();
        idHerbal = bundle.getString("idjamu2");
        getArguments().remove("idjamu2");
        Log.d("plantTab","idplant = "+ idHerbal);
        Log.d("tab 2 comparison","tab called = " + idHerbal);
        getIdCrude(idHerbal);
        recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview_plant_comparison_jamu2);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        adapter = new showsPlantAdapter(crudeModels,getActivity());
        recyclerView.setAdapter(adapter);

почти такой же, как макет вкладки 1, но его использованиеразные idherbs.

это адаптер элемента в представлении переработчика, использующий намерение

crudeViewHolderComparison.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(mCtx, detailCrude.class);
            i.putExtra("idPlant",idPlant);
            mCtx.startActivity(i);

        }
    });

и так я получаю его в классе детализации

String idPlant = getIntent().getStringExtra("idPlant");

Я уже пытался связать его с другим действием, которое вообще не требует никаких пакетов, но все равно выдает ошибку о посылке.интересная часть - ошибка всегда появляется в первом разделе первой вкладки, каждый элемент, который я выбираю, всегда выбирает ошибку на вкладке 1, даже если я нажимаю элемент на вкладке 2 (на основе logcat).Это logcat

2019-03-29 19:08:30.754 24942-24942/com.example.ilham.obatherbal E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ilham.obatherbal, PID: 24942
java.lang.RuntimeException: Parcel: unable to marshal value Enolimit
    at android.os.Parcel.writeValue(Parcel.java:1508)
    at android.os.Parcel.writeList(Parcel.java:820)
    at android.os.Parcel.writeValue(Parcel.java:1455)
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:732)
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1423)
    at android.os.Bundle.writeToParcel(Bundle.java:1133)
    at android.os.Parcel.writeBundle(Parcel.java:772)
    at android.support.v4.app.FragmentState.writeToParcel(FragmentState.java:124)
    at android.os.Parcel.writeTypedArray(Parcel.java:1338)
    at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:639)
    at android.os.Parcel.writeParcelable(Parcel.java:1527)
    at android.os.Parcel.writeValue(Parcel.java:1433)
    at android.os.Parcel.writeArrayMapInternal(Parcel.java:732)
    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1423)
    at android.os.Bundle.writeToParcel(Bundle.java:1133)
    at android.os.Parcel.writeBundle(Parcel.java:772)
    at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3685)
    at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3865)
    at android.os.Handler.handleCallback(Handler.java:754)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:165)
    at android.app.ActivityThread.main(ActivityThread.java:6375)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)

Enolimit - пример предмета, в котором есть ингредиенты, на которые я нажимаю

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...