【问题标题】:intent startActivityForResult returned result but the program crashed意图 startActivityForResult 返回结果但程序崩溃
【发布时间】:2013-10-04 17:09:17
【问题描述】:

确定父活动使用 startActivityForResult 调用 BuyActivity 并向父活动返回 3 个值。其中之一是类别。有 3 类食物,个人和教育可以选择。当我选择教育或个人时我没有问题,但是当我选择食物时我得到了这个错误,但是父活动仍然收到了返回的所有 3 个值。所以有人可以帮忙吗?

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {apps.project/apps.project.ConsultExpert}: java.lang.NullPointerException 

这个函数调用startActivityForResult

 private void displayBuyQuestionnaire() {
    Intent intent = new Intent(this, BuyActivity.class);
    startActivityForResult(intent, BUY_ADVICE); 
}

在 BuyActivity.class 中

Intent returnIntent = new Intent();
            returnIntent.putExtra("item_name", iName);
            returnIntent.putExtra("item_price", iPrice);
            returnIntent.putExtra("item_category", iCategory);
            setResult(RESULT_OK,returnIntent); 
            finish();

onActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    switch(requestCode) {
    case BUDGET_ADVICE: 
        if (resultCode == RESULT_OK && data.hasExtra("status")) {
            item_name = data.getStringExtra("status");
            Log.d("return", data.getStringExtra("status"));
            runBudgetTree();
        }
        else {
            if(resultCode == RESULT_OK)
                Log.d("msg", "result code ok tp x semua return");
        }
            break;

    case BUY_ADVICE:
        if (resultCode == RESULT_OK) {
           item_name = data.getStringExtra("item_name");           
           item_category = data.getStringExtra("item_category");
           item_price = data.getDoubleExtra("item_price", 0);
           runBuyTree();
        }

        break;
    }

LogCat

01-09 17:56:51.776: D/var i(3159): answer1 01-09 17:56:51.776: D/var i(3159): answer2 01-09 17:56:51.776: D/var i(3159): answer3 01-09 17:56:51.781: D/AndroidRuntime(3159): 关闭 VM 01-09 17:56:51.781: W/dalvikvm(3159): threadid=1: 线程退出 未捕获的异常(组=0x4001e578)01-09 17:56:51.786: E/AndroidRuntime(3159): 致命例外: main 01-09 17:56:51.786: E/AndroidRuntime(3159): java.lang.RuntimeException: 交付失败 结果 ResultInfo{who=null, request=1, result=-1, data=Intent { (有 extras) }} 到活动 {apps.project/apps.project.ConsultExpert}: java.lang.NullPointerException 01-09 17:56:51.786: E/AndroidRuntime(3159):在 android.app.ActivityThread.deliverResults(ActivityThread.java:2536) 01-09 17:56:51.786: E/AndroidRuntime(3159): 在 android.app.ActivityThread.handleSendResult(ActivityThread.java:2578) 01-09 17:56:51.786: E/AndroidRuntime(3159): 在 android.app.ActivityThread.access$2000(ActivityThread.java:117) 01-09 17:56:51.786:E/AndroidRuntime(3159):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:965) 01-09 17:56:51.786: E/AndroidRuntime(3159): 在 android.os.Handler.dispatchMessage(Handler.java:99) 01-09 17:56:51.786:E/AndroidRuntime(3159):在 android.os.Looper.loop(Looper.java:130) 01-09 17:56:51.786: E/AndroidRuntime(3159):在 android.app.ActivityThread.main(ActivityThread.java:3691) 01-09 17:56:51.786:E/AndroidRuntime(3159):在 java.lang.reflect.Method.invokeNative(Native Method) 01-09 17:56:51.786:E/AndroidRuntime(3159):在 java.lang.reflect.Method.invoke(Method.java:507) 01-09 17:56:51.786: E/AndroidRuntime(3159):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 01-09 17:56:51.786: E/AndroidRuntime(3159): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 01-09 17:56:51.786:E/AndroidRuntime(3159):在 dalvik.system.NativeStart.main(本机方法)01-09 17:56:51.786: E/AndroidRuntime(3159):引起:java.lang.NullPointerException 01-09 17:56:51.786: E/AndroidRuntime(3159): 在 apps.project.ConsultExpert.runBuyTree(ConsultExpert.java:364) 01-09 17:56:51.786:E/AndroidRuntime(3159):在 apps.project.ConsultExpert.onActivityResult(ConsultExpert.java:1769) 01-09 17:56:51.786: E/AndroidRuntime(3159): 在 android.app.Activity.dispatchActivityResult(Activity.java:3934) 01-09 17:56:51.786:E/AndroidRuntime(3159):在 android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 01-09 17:56:51.786: E/AndroidRuntime(3159): ... 11 更多

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    你必须放置 displayBuyQuestionnaire() 方法行

               Intent intent = new Intent(this, BuyActivity.class);
    

    通过这个

              Intent intent = new Intent(<your class name>.this, BuyActivity.class);
    

    【讨论】:

      【解决方案2】:

      Thred 是旧的,但仅供将来参考:

      同样的问题花了我 1 个小时,所以只分享对我有用的解决方案。我试图从第一个 Textview 的第二个活动中发送消息。 ResponseToFirst 是消息 ID,Message_fromsecondtextview

      onActivityResult 之前我正在使用

       Bundle extras = getIntent().getExtras();
       Message_fromsecond.setText(extras.getString("ResponseToFirst")); //crashed here
      

      后来发现需要用到

      String returnString = data.getExtras().getString("ResponseToFirst");
      Message_fromsecond.setText(returnString);
      

      欲了解更多信息,请查看Here

      【讨论】:

        猜你喜欢
        • 2019-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多