当前位置: 首页 > 知识库问答 >
问题:

使用 onActivityResult();问题以前没有发生过

万喜
2023-03-14

我正在制作的应用程序需要将数据从活动2转移到前一个活动1。所以我用的是startActivityForResult(),然后是on activityresult();

直到昨天,它一直运行良好,当我按下按钮从活动1转到活动2时,我的应用程序会滞后并崩溃。

如果我出于某种原因注释掉活动1中的ActivityResult(),它会再次工作。但是这样数据就不会被传递,我需要将活动2的listview中的数据传输到活动1中的text View。

我不相信我真的改变了我的代码,所以我对为什么会发生这种情况感到困惑。如果有人可以帮助我检查我的代码,那就太好了。谢谢:)

崩溃日志:

E/AndroidRuntime:致命异常:主进程:com.example.jiowhere,PID:5667 Java . lang . nullpointerexception:尝试对com . example . jio where . listview adaptor . filter(listview adaptor . Java:119)处的空对象引用调用虚拟方法“Java . lang . string Java . lang . string . Java:176”

onCreate()方法外部的活动1

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // Check that it is the SecondActivity with an OK result
        if (requestCode == 1) {
            if (resultCode == RESULT_OK) {
                // Get String data from Intent
                String returnString = data.getStringExtra("keyName");

                // Set text view with string
                TextView filterView = (TextView) findViewById(R.id.filterByTags);
                filterView.setText(returnString);
            }
        }
    }



    @Override
    public void onClick(View v) {

        if (v == tagButton) {
            Intent intent = new Intent(this, TagSystemActivity.class);
            startActivityForResult(intent, 1);

            //crashes app
            onActivityResult(1, RESULT_OK, intent);
        }

    }

OnCreate()方法内的Activity2

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                String selectedFromList = (String) (listView.getItemAtPosition(position));
                testing.setText(selectedFromList);


                Intent intent = new Intent();
                intent.putExtra("keyName", selectedFromList);
                setResult(RESULT_OK, intent);
                finish();

            }});

共有3个答案

谷梁宜
2023-03-14

您不应该手动调用onActivityResult(…)。

startActivityForResult(intent, 1);

//crashes app
onActivityResult(1, RESULT_OK, intent);

删除此对 onActivityResult(...) 的调用;从 onClick().

当您发布来自另一个活动的结果时,onActivityResult方法将自动被调用。

文建业
2023-03-14

字符串返回String=data.getStringExtra("keyName");

在这一行中,您需要将“keyName”替换为您的密钥。我认为空对象引用了keyName。

秦安怡
2023-03-14

删除下线,

        onActivityResult(1, RESULT_OK, intent);

从这里,

@Override
public void onClick(View v) {
    if (v == tagButton) {
        Intent intent = new Intent(this, TagSystemActivity.class);
        startActivityForResult(intent, 1);

        //crashes app
        onActivityResult(1, RESULT_OK, intent);
    }
}

此行调用具有空对象的活动结果,然后活动 2 在活动 1 上发送结果。您永远不需要手动调用该方法。onActivityResult 方法在从某个地方获得结果后自动调用(在你的例子中,从 activity2)。

 类似资料:
  • 构建指纹:'Google/Sailfish/Sailfish:8.0.0/OPR3.170623.008/4294783:User/Release-Keys'修订:'0'ABI:'ARM64'pid:10010,tid:10046,name:ControllerMesse>>>>com.xxxxxx<< 有人能给我指个正确的方向吗。

  • 背景: 项目中,原先服务端Access-Control-Allow-Origin设置的值为*,前端请求访问正常; 后来由于公司安全限制,*更改为一系列的白名单列表(域名列表),本地调试时由于诸如http://localhost:8090的域名不在白名单之内,所以前端接口请求会报错。 报错详情如下: 说明有跨域问题了,请求不成功。 解决方案: 服务端在之前的白名单列表Access-Control-A

  • 不确定是什么问题。。下面的代码应该可以正常工作。。 我也没有例外,但Dragable 1根本不会动。。我用另一种方法试过,但没有成功。。

  • 因此,我使用一个gps类来打开gps,这里有一个方法允许我们发送到,但是由于在AndroidX上不推荐,并且仍然可用,android团队建议我们下一个方法: 我如何使用新API来处理同样的事情?

  • Chorm浏览器打开控制器vue项目就报 关闭就不会有这个错, 大佬们 这怎么弄

  • 目前找到一个 next/og 库,但是生成的是一个图像响应。有没有类似的可以直接生成图像的库,最好支持生成多种图像格式。 ImageResponse 可以通过 jsx 渲染为图像,并为客户端响应该图像。但是这个专为 SEO 服务的,有没有更通用的库,不用直接返回图像响应,返回图像就可以了。参数也不要求必须是 jsx(本质上 ReactNode),可以是 html 字符串。运行环境在 node 环境