2013-07-02 33 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'獲得正確的值,正如你所說的,我也知道這是垃圾收集。 –

相關問題