2013-05-12 1 views
1

onActiviResult 함수에 문제가 있습니다. 코드가 컴파일되고 에뮬레이트되지만 data 매개 변수는 null을 반환합니다. 주요 기능에서onActivityResult - 데이터 문자열이 null을 반환합니다.

:

private static String sActualLogin = "admin"; 
private static String sActualPassword = "qwerty"; 

(...) 

public void setRegisterOnClick(View v) 
    { 
     Intent intentLOGIN = new Intent(this, Users.class); 
     intentLOGIN.putExtra("Type",1); 
     startActivityForResult(intentLOGIN, 1); 
    } 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if(data.getExtras().containsKey("Login")){ 
     if(resultCode==RESULT_OK && requestCode==1){ 
      String sContainer = data.getStringExtra("Login"); 
       sActualLogin=sContainer; 
       RESULT1.setText(sActualLogin); 
      } 
     } 

    if(data.getExtras().containsKey("Password")){ 
     if(resultCode==RESULT_OK && requestCode==1){ 
      String sContainer=data.getStringExtra("Password"); 
       sActualPassword=sContainer; 
       RESULT2.setText(sActualPassword); 
      } 
     } 
     } 

그리고 코드는 사용자로 이동 :

package com.example.login; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 

public class Users extends Activity { 

    private EditText etNewLogin; 
    private EditText etNewPassword; 
    private TextView RESULT3; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.users); 
     etNewLogin = (EditText) findViewById(R.id.etChangeLogin); 
     etNewLogin = (EditText) findViewById(R.id.etChangePassword); 
     RESULT3 = (TextView) findViewById(R.id.RESULT3); 

     Intent Intent2=getIntent(); 
     int number = Intent2.getIntExtra("Type", 0); 
     RESULT3.setText("" +number); //returns 1 well 
    } 

    public void giveResponse(View v) 
    { 
     Intent intent = getIntent(); 
     int iOperation = intent.getIntExtra("Type", 0); 

     if (iOperation == 1){ 
      String sNewLogin = etNewLogin.getText().toString();  
      intent.putExtra("Login", sNewLogin); 
      setResult(RESULT_OK, intent); 
      finish(); 
     } 

     if (iOperation == 2){ 
      String sNewPassword = etNewPassword.getText().toString(); 
      intent.putExtra("Password", sNewPassword);  
      setResult(RESULT_OK, intent); 
      finish(); 
    } 


    } 
} 

그래서 내가 sActualLogin가 ""onActivityResult를 한 후 설정되고있다. 이 문제를 도와주세요. 뭔가 잘못된 것이고 나는 그것을 볼 수 없습니다.

+0

? 또한 어떤 데이터가 의도 내부로 전달되는지 보려면 중단 점을 사용해 보았습니까? –

+0

GiveReponse는 사용자 활동에 표시된 버튼을 통해 호출됩니다. 그리고 MainActivity -> User in intent에서 데이터를 easly 보낼 수 있습니다. RESULT3 TextView에서 확인하고 있습니다. 하지만 setResult 데이터를 통해 내 정보를 다시 얻으려는 경우 "로그인"레이블 (구조체 내부에 들어가기 때문에)을 사용하지만 문자열에서 데이터를 임시 문자열로 이스케이프 처리하는 동안 sContainter는 null이됩니다. – F1sher

+0

LogCat에서 스택 트레이스를 보여주세요. – Blundell

답변

2

당신이 startActivityForResult(intent, 1);Users 활동을 시작 가정, 내가 볼 수있는 유일한 것은 당신이 EditText보기에 동일한 변수를 설정한다는 것입니다 :

etNewLogin = (EditText) findViewById(R.id.etChangeLogin); 
etNewLogin = (EditText) findViewById(R.id.etChangePassword); 

또한 onActivityResult(...) 검사에 if 문에 추가 할 수 있습니다 확인하십시오이 아니 빈 : 어디는`giveResponse` 메소드를 호출하는

if(data.getExtras().containsKey("Login") && !data.getStringExtra("Login").isEmpty()) 
관련 문제