Вызов переменной, которая должна быть определена через AsyncTask
в событии ввода пользователя, всегда возвращает null. Я вызываю AsyncTask()
в основном потоке, как показано ниже:
MainActivity. java:
ContactDataRepository contactDataRepository = new ContactDataRepository(mContext);
String name = contactDataRepository.getContactNameByPhoneNumber(
phoneNumber, null, null, null, null);
ContactDataRepository. java:
public String getContactNameByPhoneNumber(
String phoneNumber,
TextView tvName,
TextView tvNumber,
TextView tvAvatar,
ImageView ivDisplayInitials)
throws ExecutionException, InterruptedException {
return fetchName(phoneNumber, tvName, tvNumber, tvAvatar, ivDisplayInitials);
}
private String fetchName(
String phoneNumber,
TextView tvName,
TextView tvNumber,
TextView tvAvatar,
ImageView ivDisplayInitials)
throws ExecutionException, InterruptedException {
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... voids) {
mPhoneNumber =
worksideDatabase.phoneNumberDao().getPhoneNumberByNumberQuery(phoneNumber);
if (mPhoneNumber != null) {
contactName =
worksideDatabase
.contactDao()
.getFullNameByContactId(mPhoneNumber.getContactId());
}
return contactName;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
// Hack method to transfer the title name to the message
SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(mContext);
final SharedPreferences.Editor editor = sharedPreferences.edit();
if (mPhoneNumber != null) {
if (tvName != null) tvName.setText(contactName);
if (tvAvatar != null) tvAvatar.setText(getInitials(contactName));
if (tvNumber != null) tvNumber.setText(phoneNumber);
if (ivDisplayInitials != null) ivDisplayInitials.setVisibility(View.VISIBLE);
editor.putString("ToolbarTitle", contactName);
} else {
if (tvName != null) tvName.setText(phoneNumber);
editor.putString("ToolbarTitle", phoneNumber);
}
editor.apply();
}
}.execute().get();
return contactName;
}
Могу ли я изменить существующий код, чтобы строка name
в MainActivity была правильно определена, или мне придется переписывать AsyncTask?