使用onActivityResult()时应用崩溃;该问题之前没有发生

时间:2019-06-28 03:12:59

标签: android

我正在制作的应用程序需要将数据从活动2传输到上一个活动1。所以我正在使用startActivityForResult()然后使用onActivityResult();

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

如果出于某种原因我在activity1中将onActivityResult()注释掉,它将再次起作用。但是,那么数据将不会传递,我需要将来自activity2的listview的数据传输到activity1中的textView。

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

崩溃日志:

  

E / Android运行时:致命异常:主要       流程:com.example.jiowhere,PID:5667       java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.String java.lang.String.toLowerCase(java.util.Locale)'           在com.example.jiowhere.ListViewAdaptor.filter(ListViewAdaptor.java:119)           在com.example.jiowhere.ListViewAdaptor.tagFilter(ListViewAdaptor.java:176)           在com.example.jiowhere.RecommendationListActivity $ 2.onTextChanged(RecommendationListActivity.java:96)           在android.widget.TextView.sendOnTextChanged(TextView.java:9754)           在android.widget.TextView.setText(TextView.java:5733)           在android.widget.TextView.setText(TextView.java:5571)           在android.widget.TextView.setText(TextView.java:5528)           在com.example.jiowhere.RecommendationListActivity.onActivityResult(RecommendationListActivity.java:145)           在com.example.jiowhere.RecommendationListActivity.onClick(RecommendationListActivity.java:161)           在android.view.View.performClick(View.java:6597)           在android.view.View.performClickInternal(View.java:6574)           在android.view.View.access $ 3100(View.java:778)           在android.view.View $ PerformClick.run(View.java:25885)           在android.os.Handler.handleCallback(Handler.java:873)           在android.os.Handler.dispatchMessage(Handler.java:99)           在android.os.Looper.loop(Looper.java:193)           在android.app.ActivityThread.main(ActivityThread.java:6669)           在java.lang.reflect.Method.invoke(本机方法)           在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:493)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

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 个答案:

答案 0 :(得分:1)

删除下面的行

        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)获得结果,就会自动调用。

答案 1 :(得分:0)

String returnString = data.getStringExtra(“ keyName” );

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

答案 2 :(得分:0)

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

startActivityForResult(intent, 1);

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

将此调用移至onActivityResult(...);来自onClick()。

当您发布其他活动的结果时,会自动调用

onActivityResult方法。