2014-01-22 3 views
0

두 클래스 DashboardActivity.class 및 ProfileActivity.class가 있습니다.버튼을 통해 값을 안드로이드 코드의 다른 활동으로 전달하는 방법은 무엇입니까?

Dashboard 클래스에서 Button을 통해 ProfileActivity 클래스에 값을 전달하고 싶습니다. 하지만 그것은 'JSON이'필수 입력란이 누락되었습니다 '라는 오류와 응답을 계속받습니다. 내가 체크했을 때 대시 보드의 값이 ProfileActivity로 전달되지 않았으므로 응답에서 '필수 필드가 누락되었습니다'라는 메시지가 계속 표시됩니다.

내 질문은, 단추를 통해 값을 다른 활동으로 전달하는 방법입니다. 이미 다음 코드를 사용합니다 :

btnLinkToProfile = (Button) findViewById(R.id.btnProfile); 
btnLinkToProfile.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View view) { 
    // TODO Auto-generated method stub 
    String name = ((TextView) view.findViewById(R.id.name)).getText().toString(); 

    //userFunctions.userProfil(INPUT_METHOD_SERVICE); 
    Intent i = new Intent(getApplicationContext(),ProfileActivity.class); 
    i.putExtra(KEY_NAME, name); 
    startActivityForResult(i,0); 
} 

하지만 실행하려고하면 강제로 닫힙니다. 다음은 대시 보드 활동의 전체 코드입니다 :

public class DashboardActivity extends Activity { 
UserFunctions userFunctions; 
Button btnLogout; 
Button btnLinkToProfile; 
private static final String KEY_NAME = "name"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    /** 
    * Dashboard Screen for the application 
    * */  
    // Check login status di database 
    userFunctions = new UserFunctions(); 
    if(userFunctions.isUserLoggedIn(getApplicationContext())){ 
    // user already logged in show dashboard 
     setContentView(R.layout.dashboard); 

     //JSONObject json = jParserr.getJSONFromUrl(dashboardURL, "GET", params); 

     btnLinkToProfile = (Button) findViewById(R.id.btnProfile); 

     btnLinkToProfile.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       // TODO Auto-generated method stub 
       String name = ((TextView) view.findViewById(R.id.name)).getText().toString(); 

       //userFunctions.userProfil(INPUT_METHOD_SERVICE); 
       Intent i = new Intent(getApplicationContext(),ProfileActivity.class); 
       i.putExtra(KEY_NAME, name); 
       startActivityForResult(i,0); 

       //startActivity(i); 
       //finish(); 


      } 

     }); 
     btnLogout = (Button) findViewById(R.id.btnLogout);    
     btnLogout.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       userFunctions.logoutUser(getApplicationContext()); 
       Intent login = new Intent(getApplicationContext(), MainActivity.class); 
       login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(login); 
       // Keluar dari dashboard screen 
       finish(); 
      } 
     }); 

    }else{ 
     // user is not logged in show login screen 
     Intent login = new Intent(getApplicationContext(), MainActivity.class); 
     login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(login); 
     // Closing dashboard screen 
     finish(); 
    }   
} 

}

그리고 여기 ProfileActivity 클래스입니다 :

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.profile); 

     // Loading user Profile in Background Thread 
     new showUserProfile().execute(); 
    } 

    ///...  



    /** 
    * Background Async Task to Load user profile by making HTTP Request 
    * */ 
private class showUserProfile extends AsyncTask<String, String, String> { 

     /** 
     * Before starting background thread Show Progress Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(ProfileActivity.this); 
      pDialog.setMessage("Loading User Profile. Please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     /** 
     * getting user profile from url 
     * */ 
     protected String doInBackground(String... args) { 

      //String name = name.getText().toString(); 
      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      // getting JSON string from URL 
      JSONObject json = jParser.getJSONFromUrl(profileURL, "GET", params); 

     /* UserFunctions userFunction = new UserFunctions(); 


      if (params.length != 0) 
        return null; 
      JSONObject json = userFunction.userProfil(params[0]); 
      return json; */ 

      // Check your log cat for JSON reponse 
      Log.d("User Profile: ", json.toString()); 

      ... 
      return null; 
     } 



    } 
} 
+0

당신의'DashboardActivity' 당신이'문자열 이름 = ((텍스트 뷰) findViewById를 (R.id.name)). gettext에(). toString을 시도했다 (다음

사용 Bundle var = getIntent().getExtras()

);''Button' 클릭 안쪽? 대신 String name = ((TextView) view.findViewById (R.id.name)) .getText(). toString();'? –

+0

@Shobhit Puri 예, 이미 문자열 이름 = ((TextView) findViewById (R.id.name)). getText(). toString(); 버튼의 clickListener에 있습니다. – user2476947

+0

이 코드를 컴파일해도됩니까? 어떻게 TextView를 문자열로 변환 할 수 있습니까? 또한 불필요한 코드를 백만 줄 게시하는 이유는 무엇입니까? –

답변

1

당신은 프로필 활동의 새로운 의도를 만들 수 있습니다.

실제로는 getIntent()를 사용하여 활동이 호출 된 의도를 수신해야합니다.

그러면 "이름"이 추가 된 인 텐트 오브젝트가 반환됩니다.

편집 : 사실, 대시 보드에서 보낸 값을 어디에서 읽으려고하는지 정확히 알 수 없습니다.

ProfileActivity에서는

Intent intent = getIntent(); 
String name = intent.getStringExtra("name"); 

는 그런 다음 프로필에 대시 보드에서 이름을 사용할 수 있어야합니다.

ProfileActivity에 대해 onNewIntent()를 구현합니다.

편집 : 비동기 태스크를 호출 한 위치에 다시 포함되도록 게시물을 편집했습니다. AsyncTask가 String 매개 변수를 받아들이지 만 전달하지는 않습니다.

그래서 당신 ProfileActivity.onCreate()에서이 작업을 수행 :

당신의 doInBackground 당신이 인수 [0]

EDIT로 이름을 얻을 수 있어야 지금

Intent intent = getIntent(); String name = intent.getStringExtra("name"); new showUserProfile().execute(name); 

: 귀하의 AsyncTask를을해야 아마 :

private class showUserProfile extends AsyncTask<String, Void, Void> 

매개 변수 만 허용하기 때문에 다른 사용자는 진행률 또는 반환 값을 사용하지 않습니다.

+0

url에서 사용자 프로필을 가져 오는 doInBackground의 private 클래스 showUserProfile에서 보낸 값을 읽으려고합니다. – user2476947

+0

제안한 두 줄의 코드를 사용해 보셨습니까? 나는 그것이 당신을 위해 일할 것이라고 생각합니다. – MikeHelland

+0

예, 노력하고 있습니다. 아직도 컴파일 중이다. – user2476947

0

당신은 여분을 제대로 전달하고 있으며, 다음 활동에서 전혀 검색하지 않습니다.에서

if(var != null){ 
    myString = var.getString(KEY_NAME); 
} 
관련 문제