마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 액티비티간 데이터 주고받는방법?

0 추천

Main액티비티, A액티비티, B액티비티가 있습니다.

 
메인 액티비티에서 startActivityForResult를 통해 A액티비티로 넘어갑니다.

Intent intent = new Intent(MainActivity.this, Final_Result.class);

startActivityForResult(intent, RESULT_OK);

 

A액티비티에서는 데이터를 입력받고 입력받은 데이터를 setResult와 putExtra를쓰고 finish로 액티비티를 끝내면서

메인액티비티로 넘어갑니다.

Intent resultIntent = new Intent();
resultIntent.putExtra("result", score);
setResult(RESULT_OK, resultIntent);
finish();
 

그러면 메인액티비티에서 오버라이드 해놓은 onActivityResult가 호출이 되어야하는데 호출이 안됩니다..

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
    super.onActivityResult(requestCode, resultCode, data);
   
    Toast.makeText(getApplicationContext(), "결과값이 없습니다.", Toast.LENGTH_SHORT).show();
    if(resultCode == RESULT_OK)
    {
    if(data != null)
    {
    res = data.getIntArrayExtra("result");
    request = true;
    }
    }
    }
 
토스트가 안찍히는걸보면 호출이 안되는거 같은데 왜 호출이 안되는지 모르겠습니다..

 

익명사용자 님이 2014년 12월 26일 질문
2014년 12월 26일 수정

3개의 답변

0 추천

문제는

startActivityForResult(intent, RESULT_OK);

에서 RESULT_OK 를 사용했기때문입니다. 이 값은 -1 이므로 API에 정의된 값

requestCode If >= 0, this code will be returned in onActivityResult() when the activity exits.

이므로 -1로 들어오니까 activity가 없는것으로 처리되어 onActivityResult 가 불리지않은것입니다.

startActivityForResult(intent, 2); 이와 같이 양수를 줘야함돠

nicehee (73,100 포인트) 님이 2014년 12월 26일 답변
nicehee님이 2014년 12월 26일 수정
0 추천
startActivityForResult를 잘못 호출하고 있습니다.

API문서를 정독하세요.

A에서 메인으로 값을 되돌려줄 때는 Intent를 새로 생성해서 써도 상관없습니다.
익명사용자 님이 2014년 12월 26일 답변
0 추천

수정한 부분 - 굵게 ....

int Final_Result_Ok = 1 ;

Intent intent = new Intent(MainActivity.this, Final_Result.class);

// startActivityForResult(intent, RESULT_OK);  // 이것은 Activity에 있는 변수 ??????

startActivityForResult(intent, Final_Result_Ok);

A액티비티에서는 데이터를 입력받고 입력받은 데이터를 setResult와 putExtra를쓰고 finish로 액티비티를 끝내면서 메인액티비티로 넘어갑니다.

Intent resultIntent = new Intent();
resultIntent.putExtra("result", score);
setResult(Activity.RESULT_OK, resultIntent);    // 정확하게 하기 위해서
finish();
 

그러면 메인액티비티에서 오버라이드 해놓은 onActivityResult가 호출이 되어야하는데 호출이 안됩니다..

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
     super.onActivityResult(requestCode, resultCode, data);
    
     if(resultCode == Activity.RESULT_OK)
     {
         if(requestCode == Final_Result_ok) {
             if(data != null)
             {
                 res = data.getIntArrayExtra("result");
                  request = true;
             }
        }
   }
}
 
Behappy007 (240 포인트) 님이 2014년 12월 26일 답변
...