首页 > 解决方案 > 使用 gson 在 onActivityResult 中获取更新的模型?传递结果 ResultInfo 失败

问题描述

我有一个具有编辑选项的水平适配器。选择编辑时,它会打开新活动。编辑后返回水平适配器。我正在尝试使用 onActivityResult 更新适配器中的模型类。但痕迹在说

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=78, result=-1, data=Intent { (has extras) }} to activity {com.codon.masterpiece/com.codon.masterpiece.ui.home.FullScreenSelf}: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4335)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4379)
        at android.app.ActivityThread.-wrap19(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1673)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:6651)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)


Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
        at com.codon.masterpiece.ui.home.SelfHorizontalScroll.instantiateItem(SelfHorizontalScroll.java:109)
        at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1158)
        at androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:669)
        at androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:631)
        at androidx.viewpager.widget.ViewPager.dataSetChanged(ViewPager.java:1086)
        at androidx.viewpager.widget.ViewPager$PagerObserver.onChanged(ViewPager.java:3097)
        at androidx.viewpager.widget.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:291)
        at com.codon.masterpiece.ui.home.FullScreenSelf.onActivityResult(FullScreenSelf.java:237)
        at android.app.Activity.dispatchActivityResult(Activity.java:7355)

这是我的 onActivityResult

 if (requestCode == 78 && data != null) {
            if (resultCode == RESULT_OK) {
                int position = data.getIntExtra("position", 0);
                Gson gson = new Gson();
                String artworkData = data.getStringExtra("ArtworkData");
                TypeToken<ArtworksData> token = new TypeToken<ArtworksData>() {
                };
                ArtworksData artworksData = gson.fromJson(artworkData, token.getType());

                arrayList.set(position, artworksData);

                selfHorizontalScroll.notifyDataSetChanged();
                //Toast.makeText(this, "Got it", Toast.LENGTH_SHORT).show();
            }
        }

重定向到编辑活动

if (item.getItemId() == R.id.edit_menu) {
                    //call edit art activity and pass task id

                    Intent intent = new Intent(ctx, EditArtwork.class);
                    //Intent newintent = ctx.getIntent();
                    // Bundle bundle = newintent.getExtras();
                    String taskID = feed.getId() + "", imageUrl = "";

                    imageUrl = feed.getImg1() + "";
                    intent.putExtra("artwork_id", taskID);
                    intent.putExtra("image_url", imageUrl);
                    intent.putExtra("position", ((FullScreenSelf) ctx).viewPager.getCurrentItem());
                    //intent.putExtra("wishtosell", feed.getWishtosell());
                    Activity origin_new = (Activity) ctx;
                    origin_new.startActivityForResult(intent, 78);

                }

编辑活动中的方法

if ("False".equals(error)){
                        kProgressHUD.dismiss();
                        Toast.makeText(EditArtwork.this, "Artwork updated successfully", Toast.LENGTH_SHORT).show();
                        Log.d("Upload", jsonObject.toString());
                        Gson gson = new Gson();
                        JsonObject data = jsonObject.getAsJsonObject("data");
                        TypeToken<ArtworksData> token = new TypeToken<ArtworksData>() {
                        };
                        ArtworksData artworksData = gson.fromJson(data.toString(), token.getType());

                        //EditArtwork.this.onBackPressed();
                        Intent intent = new Intent();
                        intent.putExtra("ArtworkData", artworksData.toString());
                        setResult(RESULT_OK, intent);
                        finish();
                    }

它在这里崩溃。在适配器中的 instantiateItem 方法中。

 final boolean[] hasLiked = {feed.getLiked()};
    final boolean[] redirect = {feed.getBrSent()};

标签: androidandroid-intentadapteronactivityresult

解决方案


推荐阅读