この問題についてここで多くの投稿を読みましたが、続行して次のアクティビティをロードする前に、連絡先名が見つかるまでコードを待機させることができないようです。短い SMS の場合は問題なく動作しますが、特に長い SMS の場合はクラッシュします。助けてください。
これは、問題の下に提案されている新しいコードであり、同じです
new LoaderAsyncTask().execute();
}
public class LoaderAsyncTask extends AsyncTask<Void, Void, Void> {
// Variables to pass data between doInBackground() and onPostExevute() here
protected Void doInBackground(Void... params) {
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(smsSender));
Cursor cursor = ((Context) contexts).getContentResolver().query(uri,
new String[] { PhoneLookup.DISPLAY_NAME, PhoneLookup._ID },
null, null, null);
contactId = "";
name="unknown";
if (cursor.moveToFirst()) {
do {
contactId = cursor.getString(cursor.getColumnIndex(PhoneLookup._ID));
name = cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME));
} while (cursor.moveToNext());
}
return null;
}
protected void onPostExecute(Void result) {
////////////////////////////////////
// start a new task before dying
intents.setClass((Context) contexts, SendSMSActivity.class);
intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// pass Serializable object
intents.putExtra("PhoneNumber", smsSender);
intents.putExtra("smsBody", smsBody);
intents.putExtra("SmsMessageId", SmsMessageId);
intents.putExtra("contactId", contactId);
intents.putExtra("SenderName", name);
// start UI
((Context) contexts).startActivity(intents);
}
}