0

これらの 2 つのトーストがフラグメント内の AsyncTask 内にある場合、クラッシュが発生します。2 つのトーストを削除すると、すべてがクラッシュすることなく機能します。どうしてこれなの?また、クラッシュを引き起こさずに AsyncTask 内でトースト メッセージを使用するにはどうすればよいですか?

 Toast.makeText(activity, "onPostExecute", Toast.LENGTH_LONG).show();
 Toast.makeText(activity,"onPreExecute", Toast.LENGTH_LONG).show();

Logcat は、トースト メッセージに対して nullPointerException を示します。2 つのトーストのうち最初のものを削除すると実行され、後でクラッシュします。最初のトーストがある場合は開始時にクラッシュし、両方のトーストが削除された場合はクラッシュしません。

残りのコード

 public class FragmentStaticFragment extends Fragment {

private Button buttonStartProgress;
private ProgressBar progressBar;
Activity activity = getActivity();

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_static_fragment, container, false);

    buttonStartProgress = (Button) view.findViewById(R.id.button1);
     progressBar = (ProgressBar) view.findViewById(R.id.progressBar1);


    buttonStartProgress.setOnClickListener(new Button.OnClickListener(){

           @Override
           public void onClick(View v) {
            // TODO Auto-generated method stub
            new BackgroundAsyncTask().execute();
            buttonStartProgress.setClickable(false);
           }

        });


    return view;
}

 public class BackgroundAsyncTask extends AsyncTask<Void, Integer, Void>{

    int myProgress;

     @Override
      protected void onPostExecute(Void result) {
       // TODO Auto-generated method stub
               // commented out this toast to avoid crashing
      // Toast.makeText(activity, "onPostExecute", Toast.LENGTH_LONG).show();
       buttonStartProgress.setClickable(true);
      }

      @Override
      protected void onPreExecute() {
       // TODO Auto-generated method stub
              // commented out this toast to avoid crashing
     //  Toast.makeText(activity,"onPreExecute", Toast.LENGTH_LONG).show();
       myProgress = 0;
      }

      @Override
      protected Void doInBackground(Void... params) {
       // TODO Auto-generated method stub
       while(myProgress<100){
        myProgress++;
        publishProgress(myProgress);
           SystemClock.sleep(100);
       }
       return null;
      }

      @Override
      protected void onProgressUpdate(Integer... values) {
       // TODO Auto-generated method stub
       progressBar.setProgress(values[0]);
      }


} // end BackgroundAsyncTask

 }

編集;

スタックトレース情報を追加

07-13 09:23:01.383: E/AndroidRuntime(19489): FATAL EXCEPTION: main
07-13 09:23:01.383: E/AndroidRuntime(19489): java.lang.NullPointerException
07-13 09:23:01.383: E/AndroidRuntime(19489):    at android.widget.Toast.<init>(Toast.java:92)
07-13 09:23:01.383: E/AndroidRuntime(19489):    at Android.widget.Toast.makeText(Toast.java:233)
07-13 09:23:01.383: E/AndroidRuntime(19489):    at com.example.asynctaskprogressbarexample.FragmentStaticFragment$BackgroundAsyncTask.onPreExecute(FragmentStaticFragment.java:62)
07-13 09:23:01.383: E/AndroidRuntime(19489):    at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
07-13 09:23:01.383: E/AndroidRuntime(19489):    at android.os.AsyncTask.execute(AsyncTask.java:511)
07-13 09:23:01.383: E/AndroidRuntime(19489):    at com.example.asynctaskprogressbarexample.FragmentStaticFragment$1.onClick(FragmentStaticFragment.java:36)
4

1 に答える 1