このメソッドを使用するには、このメソッドをクラスにして AsyncTask を拡張する必要がありますか? どこかで、UI スレッドから DB 操作を実行するべきではないと読んだことがありますか?
もしそうなら、どうすればそれを行うことができますか?
コードATMは次のとおりです。
public void addNewContact() {
HashMap<String, String> queryValuesMap = new HashMap<String, String>();
queryValuesMap.put("userName", userName);
queryValuesMap.put("userEmail", userEmail);
queryValuesMap.put("userPassword", userPassword);
queryValuesMap.put("userAvatar", userAvatar);
queryValuesMap.put("userSex", userSex);
dbTools.insertUser(queryValuesMap);
dbTools.close();
}
私の送信ボタン onClick() から呼び出されます。
私がすべきだと思うことは次のとおりです。
private class AddNewContact extends AsyncTask <Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
HashMap<String, String> queryValuesMap = new HashMap<String, String>();
queryValuesMap.put("userName", userName);
queryValuesMap.put("userEmail", userEmail);
queryValuesMap.put("userPassword", userPassword);
queryValuesMap.put("userAvatar", userAvatar);
queryValuesMap.put("userSex", userSex);
dbTools.insertUser(queryValuesMap);
dbTools.close();
} catch (Exception e) {}
return null;
}
}
次に、送信ボタン onClick() に AddNewContact.execute() を追加します。
これは正しいですか?
編集:これは、受け入れられた回答の下の議論にあったものを実装した後の作業コードです:
onClick で:
AddNewUserParams addNewUserParams = new AddNewUserParams();
addNewUserParams.userName = this.userName;
addNewUserParams.userEmail = this.userEmail;
addNewUserParams.userPassword = this.userPassword;
addNewUserParams.userAvatar = this.userAvatar;
addNewUserParams.userSex = this.userSex;
new AddNewContact().execute(addNewUserParams);
ネストされたクラスは次のとおりです。
private class AddNewUserParams {
String userName;
String userEmail;
String userPassword;
String userAvatar;
String userSex;
}
private class AddNewContact extends AsyncTask <AddNewUserParams, Void, Void> {
@Override
protected Void doInBackground(AddNewUserParams... params) {
try {
HashMap<String, String> queryValuesMap = new HashMap<String, String>();
queryValuesMap.put("userName", params[0].userName);
queryValuesMap.put("userEmail", params[0].userEmail);
queryValuesMap.put("userPassword", params[0].userPassword);
queryValuesMap.put("userAvatar", params[0].userAvatar);
queryValuesMap.put("userSex", params[0].userSex);
dbTools.insertUser(queryValuesMap);
dbTools.close();
} catch (Exception e) {
toastMaker.toast(net.asdqwe.activities.Signup.this, configurationz.ERROR_MESSAGES_SIGNUP_USER_NOT_CREATED, configurationz, Toast.LENGTH_LONG);
}
return null;
}
@Override
protected void onPostExecute(Void result) {
Intent signupSuccessHome = new Intent(getApplicationContext(), Home.class);
signupSuccessHome.putExtra(EXTRA_MESSAGE, userEmail);
startActivity(signupSuccessHome);
super.onPostExecute(result);
}
}