0

私のアプリケーションには、新しいリマインダーがあるかどうかを数秒ごとにチェックするバックグラウンド AsyncTask があり、新しいリマインダーがある場合は、リマインダー メッセージを表示する dialogeFragment を開始する必要があります。問題は、dialogeFregment はアクティビティからのみ使用できることを読んだことです。これを実装する方法についてのアイデアを共有できますか?

これが現在のコードです。

public class checkReminderTask extends AsyncTask<FragmentManager, String, Void> {
Context context;
private MainActivity activity;
FragmentManager fm;

checkReminderTask(Context app_context){
    context=app_context;
    objPlayer=MediaPlayer.create(context, R.raw.its_time_time_tim);
    reminderTable = new ParseObject("ReminderTable");
    settingsTable = new ParseObject("SettingsTable");

    androidId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);

    ParseQuery query = new ParseQuery("SettingsTable");
    query.whereEqualTo("userID", androidId);
    query.getFirstInBackground(new GetCallback() {
      public void done(ParseObject object, ParseException e) {
        if (object == null) {
            //TODO something, throw exception
        } else {
            myNumber=object.getString("userNumber");
        }
      }
    });
}

@Override
protected Void doInBackground(FragmentManager... arg) {
    //infinitely loop, and move the ball accordingly
        fm=arg[0];
        while (1 < 2)
        {
            //downloading the reminder...
            try
            {
                publishProgress(currentDateandTime,reminderExeTime,reciverNumber,message);
                Thread.sleep(1000);
            }
            catch (Exception e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

}

@Override
protected void onProgressUpdate(String... values)
{
    super.onProgressUpdate(values);
    if(values[0].equals(values[1])){
        MessageReceivedReminder dialog = new MessageReceivedReminder();
        dialog.setMessageArguments(context,values[2],values[3]);
        dialog.show(fm, "MyDialog");

        objPlayer.start();
    }
    else
    {
        Log.i("thread", "compareFailed");
    }   

}

アクティビティからのコード (FragmentManager を直接送信しようとしています):

FragmentManager fm = getFragmentManager();
        ringThread.execute(fm);            

現在、ヌル ポインターが原因で実行時エラーが発生しています。

ありがとう!!

4

1 に答える 1

0

アプリのコンテキストを渡している場合、これが原因です。

ダイアログを膨張させるときは、常にActivityコンテキストを使用し、getApplicationContext().

詳しくは、こちらをお読みください: Android: ProgressDialog.show() crashes with getApplicationContext

于 2013-06-09T17:21:49.627 に答える