OnActivityResult返回who = null错误

时间:2014-03-04 06:08:58

标签: java android nullpointerexception onactivityresult

第一个活动(classDetails.class)

// addStudent Button

             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

3 个答案:

答案 0 :(得分:0)

试试这个..

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

        setResult(RESULT_OK, returnIntent);   

答案 1 :(得分:0)

在第二项活动中使用与bellow相同的意图

          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);
}

答案 2 :(得分:0)

替换这些行

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

使用

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