2013-07-02 43 views
2

我从Activity得到一些值,并得到那些在onActivityResult()onActivityResult()被调用,但收到的数据是nullMainActivity无法在onActivityResult()

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    // TODO Auto-generated method stub 

    if(item.getItemId() == R.id.action_settings){ 
     Intent intent = new Intent(MainActivity.this, AddDetailActivity.class); 
     startActivityForResult(intent, request_code); 
    } 
    return true; 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == request_code){ 
     if(resultCode == RESULT_OK){ 

      String name = data.getExtras().getString(AddDetailActivity.NAME_KEY); 
      String address = data.getExtras().getString(AddDetailActivity.ADDRESS_KEY); 

      Toast.makeText(MainActivity.this, "Name is : " + name + " Address : " + address, Toast.LENGTH_LONG).show(); 

         } 
    } 
} 

CODE,这是第二个获得数据Activity从即时得到的数据是这样的:

public class AddDetailActivity extends Activity { 

public static final String NAME_KEY = "U-name"; 
public static final String ADDRESS_KEY = "add"; 

protected EditText name_et, address_et; 
protected String put_name, put_address; 
protected Button button = null; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add_detail); 

    name_et = (EditText) this.findViewById(R.id.name_editText); 
    address_et = (EditText) this.findViewById(R.id.address_editText); 

    put_name = name_et.getText().toString(); 
    put_address = address_et.getText().toString(); 
    //put_type = null; 

    button = (Button) findViewById(R.id.add_button); 
    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      Intent intent = new Intent(); 

      intent.putExtra(NAME_KEY, put_name); 
      intent.putExtra(ADDRESS_KEY, put_address); 
      setResult(RESULT_OK, intent); 

      finish(); 
     } 
    }); 
}} 

如何解决这个错误,谢谢

+0

而不是这个'字符串名称= data.getExtras()的getString(AddDetailActivity.NAME_KEY)'试试这个'字符串名称=数据.getExtras()。的getString(U-名)'。 – Raghunandan

+0

@Raghunandan我也尝试过,但结果仍为'null' –

+0

现在试试我的答案 – Raghunandan

回答

5

AddDetailActivity.java

只是要改变这应该是内部onClick方法

put_name = name_et.getText().toString(); 
put_address = address_et.getText().toString(); 

您的点击方法应该是这样的

button.setOnClickListener(new View.OnClickListener() { 

     @Override 
      public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

      put_name = name_et.getText().toString(); 
      put_address = address_et.getText().toString(); 
      // put_type = null; 

      Intent intent = new Intent(); 

      intent.putExtra(NAME_KEY, put_name); 
      intent.putExtra(ADDRESS_KEY, put_address); 
      setResult(RESULT_OK, intent); 

      finish(); 
     } 
    }); 
+0

万亿感谢这工作! –

+0

太棒了,即使盯着问题几分钟,我也找不到它。 –

+0

@WandMaker我认为这经常发生在开发过程中,逻辑是'好',但结果是'NULL';-) –

3

移动内部按钮的GET码点击

button = (Button) findViewById(R.id.add_button); 
    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      put_name = name_et.getText().toString(); 
      put_address = address_et.getText().toString(); 
      Intent intent = new Intent(); 

      intent.putExtra(NAME_KEY, put_name); 
      intent.putExtra(ADDRESS_KEY, put_address); 
      setResult(RESULT_OK, intent); 

      finish(); 
     } 
    }); 

此外,在您的onActivityResult做出如下改变

String name = data.getExtras().getString("U-name"); 
    String address = data.getExtras().getString("add"); 
0

Public static variables and Android activity life cycle management

请参阅本,当活动B被使用的是从该活动的静态变量完成。

所以AddDetailActivity.NAME_KEY将不可用做这个,而不是

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == request_code){ 
     if(resultCode == RESULT_OK){ 

      String name = data.getExtras().getString("U-name"); 
      String address = data.getExtras().getString("add"); 

      Toast.makeText(MainActivity.this, "Name is : " + name + " Address : " + address, Toast.LENGTH_LONG).show(); 

         } 
    } 
+0

亲爱的!很抱歉地说,但静态可用仍然适用于我的情况,再见,谢谢你的建议。 –

+0

@ArshadAliSoomro在这种情况下使用静态变量并不好,因为你称之为完成,并且你应该让gc释放内存,所以在这种情况下,静态变量会引用可能被垃圾收集的活动。 – Raghunandan

+0

@Raghunandan我同意,但我已经将这些用于'KEY',这样我就可以用'KEY'获得正确的值,正如你所说的,我也知道这是垃圾收集。 –

相关问题