저는 StackOverflow와 Google에서 비슷한 상황을 많이 읽었지만 제 경우에는 도움이되지 않았습니다. 나는이 개 활동하는이 있고 B. A는 결과에 대한 활동과 B를 호출Android : onActivityResult 데이터는 항상 null
이@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.mnuMainSettings:
startActivity(new Intent(ActivityMain.this, ActivitySettings.class));
break;
case R.id.mnuMainHelp:
startActivity(new Intent(ActivityMain.this, ActivityHelp.class));
break;
case R.id.mnuMainEULA:
Intent intent = new Intent(ActivityMain.this, ActivityDisclaimer.class);
startActivityForResult(intent, 1);
break;
}
return true;
}
활동 B :
public class ActivityDisclaimer extends Activity
{
private WebView webView;
public static final int ACTIVITY_RESULT_DISCLAIMER = 1;
public static final String ACTIVITY_RESULT = "result";
public static final int ACTIVITY_RESULT_OK = 1;
public static final int ACTIVITY_RESULT_CANCELED = 2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.disclaimer);
webView = (WebView) findViewById(R.id.WebViewDisclaimer);
webView.loadUrl("file:///android_asset/disclaimer.html");
}
public void onClickDisclaimerBtnAccept(View view) {
Prefs prefs = new Prefs(this);
prefs.setAcceptDisclaimer(true);
prefs.commit();
Intent returnIntent = new Intent();
returnIntent.putExtra("result",true);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
public void onClickDisclaimerBtnDecline(View view) {
Prefs prefs = new Prefs(this);
prefs.setAcceptDisclaimer(false);
prefs.commit();
Intent returnIntent = new Intent();
returnIntent.putExtra("result",false);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
}
그러나, 내 onActivityResult를 방법, 데이터는 의도로 반환 항상 NULL이다 .
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
// For response from disclaimer activity
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK){
if (null != intent) {
Boolean accepted = intent.getBooleanExtra("result", false);
Log.d(TAG, "Boolean Data: " + accepted.toString());
if (!accepted) finish();
} else { Log.d(TAG, "RESULT OK, DATA NULL"); }
}
if (resultCode == Activity.RESULT_CANCELED){
if (null != intent) {
Boolean accepted = intent.getBooleanExtra("result", false);
Log.d(TAG, "Boolean Data: " + accepted.toString());
finish();
} else { Log.d(TAG, "RESULT CANCELED, DATA NULL"); }
}
}
}//onActivityResult
"RESULT CANCELLED, DATA NULL"은 내가 얻은 전부입니다. 내가 여기 뭔가를 놓친 적이 있니? 아마도 나는이 코드를 너무 오래 꼼짝 않고 바라 보았을 것입니다!
편집 : 내 질문에 더 구체적으로 말하자면, 왜 null 반환을 얻고 있습니까?
IF 루프에서'intent! = int''가 아닌'intent! = null'을 확인하지 않아야합니까? 또한, 액티비티 B의'setResult' - 액티비티가 없으면'RESULT_OK'를 넣으십시오. – gilonm
마무리를 차단하면 아무 효과가 없습니다. null! = intent는 내가 읽은 것보다 나은 선택입니다. 어떤 경우에는 null 검사가 잘 작동하고 있는데, 그 이유는 null 결과를 얻는 이유입니다. – qkzoo1978
BTW, 위의 최종 vars 선언 (result_OK, cancelled ...)을 보았습니다. 의도와 코드에서 사용하지 마십시오. 관련성이 있습니까? (당신은 최종 변수에서'ACTIVITY_RESULT_OK'를 선언했으나 Activity.RESULT_OK'를 사용한 활동에서 – gilonm