【问题标题】:OnActivityResult returns a who=null error [duplicate]OnActivityResult 返回 who=null 错误 [重复]
【发布时间】:2014-03-04 06:08:58
【问题描述】:

第一个活动(classDetails.class)

//添加学生按钮

             Button addStudent = (Button) this.findViewById(R.id.addStudent2);
        addStudent.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //on click, start activity for result
                Intent addStudent = new Intent(ClassDetails.this, AddStudent.class);

                 addStudent.putExtra("position", classPosition);
                startActivityForResult(addStudent,3);
            }
        });
     }

第二个活动(addStudent.class): //保存按钮

    Button save = (Button) findViewById(R.id.saveButton1);  
    save.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {

            //get student name
            studentName = inputName.getText().toString();

            //convert classID to int and check if entry is a number
            try {
                studentNum = Integer.parseInt(inputID.getText().toString());
            } catch(NumberFormatException nfe) {

                 Context context = getApplicationContext();
                 CharSequence text = "Please Enter a Number";
                 int duration = Toast.LENGTH_SHORT;

                 Toast toast = Toast.makeText(context, text, duration);
                 toast.show(); 

            } 
                //use studentNum as string
            studentN = Integer.toString(studentNum); 

            Intent returnIntent = new Intent();
            returnIntent.putExtra("name", studentName);
            returnIntent.putExtra("number", studentN);

            setResult(RESULT_OK, returnIntent);   

             Log.d(TAG, "rusult OK set");

             finish();
    }
    });

第一个活动(classDetails.class): //从Add Student中获取活动结果

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
      if (requestCode == 3) {

         if(resultCode == RESULT_OK){  
             Log.d(TAG, "classDetail result from addStudent OK");

             String studentName = data.getExtras().getString("name");  
             String studentNum = data.getExtras().getString("number");
             //convert studentNum to int
             int studentN = Integer.parseInt(studentNum);

             //add student to database
             myData = DataStore.getInstance();
             ArrayList<Student> studentList = myData.getClassArray().get(classPosition).getList();
             Student newStudent = new Student();
             newStudent.setInputName(studentName);
             newStudent.setInputID(studentN);

             studentList.add(newStudent);

             updateStudentList(classPosition, newStudent.getInputName());

             //student added toast
             Context context = getApplicationContext();
             CharSequence text = studentName + " Added";
             int duration = Toast.LENGTH_SHORT;

             Toast toast = Toast.makeText(context, text, duration);
             toast.show(); 
      }
         if (resultCode == RESULT_CANCELED) {    
             Context context = getApplicationContext();
             CharSequence text = "No Student Added";
             int duration = Toast.LENGTH_SHORT;

             //Set listView
            classView = (ListView) findViewById(R.id.list);
            adapterClass = new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, studentNames);    
            classView.setAdapter(adapterClass);

             Toast toast = Toast.makeText(context, text, duration);
             toast.show();
         }
      }



    }//onActivityResult

LogCat:

 03-04 00:35:19.109: E/AndroidRuntime(2883): FATAL EXCEPTION: main
    03-04 00:35:19.109: E/AndroidRuntime(2883): Process: com.example.classorganizer, PID: 2883
    03-04 00:35:19.109: E/AndroidRuntime(2883): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=3, result=-1, data=Intent { (has extras) }} to activity {com.example.classorganizer/com.example.classorganizer.ClassDetails}: java.lang.NullPointerException
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3365)

    03-04 00:35:19.109: E/AndroidRuntime(2883):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3408)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at android.app.ActivityThread.access$1300(ActivityThread.java:135)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at android.os.Handler.dispatchMessage(Handler.java:102)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at android.os.Looper.loop(Looper.java:136)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at android.app.ActivityThread.main(ActivityThread.java:5017)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at java.lang.reflect.Method.invokeNative(Native Method)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at java.lang.reflect.Method.invoke(Method.java:515)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at dalvik.system.NativeStart.main(Native Method)
    03-04 00:35:19.109: E/AndroidRuntime(2883): Caused by: java.lang.NullPointerException
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at com.example.classorganizer.ClassDetails.onActivityResult(ClassDetails.java:133)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at android.app.Activity.dispatchActivityResult(Activity.java:5423)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3361)
    03-04 00:35:19.109: E/AndroidRuntime(2883):     ... 11 more

【问题讨论】:

  • ClassDetails.java 中的第 133 行是什么?

标签: java android nullpointerexception onactivityresult


【解决方案1】:

试试这个..

        Intent returnIntent = getIntent();
        returnIntent.putExtra("name", studentName);
        returnIntent.putExtra("number", studentN);

        setResult(RESULT_OK, returnIntent);   

【讨论】:

    【解决方案2】:

    在第二个活动中使用相同的意图,如下所示

              Intent myLocalIntent= getIntent();
        // look into the bundle sent to Activity2 for data items
        Bundle myBundle= myLocalIntent.getExtras();
        Double v1 = myBundle.getDouble("val1");
        Double v2 = myBundle.getDouble("val2");
        // operate on the input data
        Double vResult= v1 + v2;
        // for illustration purposes. show data received & result
        dataReceived.setText("Data received is \n"
        + "val1= "+ v1 + "\nval2= "+ v2
        + "\n\nresult= "+ vResult);
        // add to the bundle the computed result
        myBundle.putDouble("vresult", vResult);
        // attach updated bumble to invoking intent
        myLocalIntent.putExtras(myBundle);
        // return sending an OK signal to calling activity
        setResult(Activity.RESULT_OK, myLocalIntent);
                finish();
    

    在第一个活动中,通过以下方式获取值

    super.onActivityResult(requestCode, resultCode, data);
    try{
    if((requestCode== 101 ) && (resultCode== Activity.RESULT_OK)){
    Bundle myResults= data.getExtras();
    Double vresult= myResults.getDouble("vresult");
    lblResult.setText("Sum is "+ vresult);
    }
    

    【讨论】:

      【解决方案3】:

      替换这些行

      String studentName = data.getExtras().getString("name");  
                      String studentNum = data.getExtras().getString("number");
      

      String studentName = data.getStringExtra("name");  
                      String studentNum = data.getStringExtra("number");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-17
        • 1970-01-01
        • 2018-12-10
        • 1970-01-01
        • 1970-01-01
        • 2013-01-11
        • 1970-01-01
        相关资源
        最近更新 更多