繁体   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