2014-01-08 6 views
0

좋아요 여기서 간단하게 뭔가를 엉망으로 만들고 있습니다.인형을위한 문자열 초기화

나는 모든 액티비티 내에서 세 가지 클래스가 : 내 활동 클래스에서

public class ActivityUserAccountCreate extends Activity implements 
     OnClickListener { 

} 

private class postToHttps extends AsyncTask<String, Integer, String> { 
@Override 
    protected String doInBackground(String... params) { 

     try { 
      createUserAccount(); 

     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 
} 

public void createUserAccount() throws ClientProtocolException, IOException { 
... 
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 

Log.d("Posting Username", usernameFinal); 
nameValuePairs.add(new BasicNameValuePair("username", "usernameFinal")); 
... 

} 

을 나는 레이아웃에있는 세 개의 문자열을 초기화합니다. 기본적으로 사용자는 자신의 사용자 이름을 EditText에 입력합니다. 문자열은 필드 형식의 텍스트를 가져 오는 것입니다. 그 모든 잘 작동하지만 createUserAccount() 같은 문자열을 사용하려고합니다. 나는 그 시점에서 문자열이 null이라고 생각하므로 createUserAccount()에서 다시이 세 문자열을 다시 초기화해야합니까? 그렇다면 활동 교실에서했던 것과 같은 방식으로해야합니까?

... 
new postToHttps().execute(usernameFinal,passwordFinal,userEmail); 
... 

private class postToHttps extends AsyncTask<String, String, String> { 

     @Override 
     protected String doInBackground(String... params) { 
     String usernameFinal = params[0]; 
      String passwordFinal = params[1]; 
      String userEmail = params[2]; 

      try { 
       createUserAccount(usernameFinal, passwordFinal, userEmail); 

      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 
    } 

public void createUserAccount(String usernameFinal, String passwordFinal, String userEmail) throws ClientProtocolException, IOException { 

    String uri = "editedout.php"; 
    Log.d("Action", "Posting user data to php"); 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost getMethod = new HttpPost(uri); 
    Log.d("Posting Location", uri); 
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 

    Log.d("Posting Username", usernameFinal); 
    nameValuePairs 
      .add(new BasicNameValuePair("username", usernameFinal)); 

    Log.d("Posting Pass", passwordFinal); 
    nameValuePairs 
      .add(new BasicNameValuePair("password", passwordFinal)); 

    nameValuePairs.add(new BasicNameValuePair("email", userEmail)); 

    getMethod 
      .setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8)); 
    client.execute(getMethod); 
    Log.d("Action", "Finished Posting Data to PHP"); 
} 

하지만 충돌을 얻고있다 : I가, 아래의 권고에 따라 편집 한

감사

확인을 클릭합니다. 그것은 doInBackground에서 충돌하는 것처럼 보이지만 여전히 LogCat을 읽는 것을 배우고 있습니다.

답변

0

아무 것도 다시 초기화 할 필요가 없지만 AsyncTask에 3 개의 문자열을 전달하려는 경우 doInBackground(String... params)에 사용 된 가변 인수를 사용하는 것이 좋습니다. 예를 들어

:

... 
private class PostToHttps extends AsyncTask<String, Integer, String> { 
@Override 
    protected String doInBackground(String... params) { 
     String username = params[0]; 
     String firstName = params[1]; 
     String lastName = params[2]; 

     createUserAccount(username, firstName, lastName); 
    } 
... 

PostToHttps httpsTask = new PostToHttps(); 
httpsTask.execute(usernameEditText.getText().toString(), 
        firstNameEditText.getText().toString(), 
        lastNameEditText.getText().toString); 

... 

public void createUserAccount(String username, String firstName, String lastName) 
    throws ClientProtocolException, IOException { 
... 
+0

내가 제대로 편집 thnk하지만, 충돌을 얻고있다. 위의 참조 –

+0

postToHttps 작업에서'execute (...) '를 호출하면 사용자 이름, 암호 및 전자 메일 문자열을 전달합니까? – Yjay

+0

새로운 postToHttps(). execute(); –