簡體   English   中英

假人的字符串初始化

[英]String Initialization for Dummies

好吧,我在這里弄亂了一些簡單的東西。

我在一個活動中有三個班級:

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"));
...

}

在我的Activity類中,我初始化了布局中的三個String。 基本上,用戶在EditText中輸入其用戶名。 字符串是=以獲取字段中的文本。 一切正常,但我試圖在createUserAccount()中使用這些相同的字符串。 我認為此時Strings為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");
}

但是崩潰了 看起來好像在doInBackground中崩潰了,但仍在學習讀取LogCat。

您不必重新初始化任何東西,但是如果您嘗試將三個String傳遞到AsyncTask ,建議使用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 {
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM