onPostExecute无法打开Intent

时间:2016-10-30 11:07:27

标签: java android android-asynctask

基本上我使用AsyncTask来显示progressBar,在progress10之后,它应该运行位于MainActivity的方法。如果progressBar10/10,则会导致以下错误导致崩溃。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference

MapProgressTask

    @Override
protected void onPostExecute(String result) {
    textView.setText(result);
    button.setEnabled(true);
    progressDialog.hide();
    MainActivity mainActivity = new MainActivity();
    mainActivity.getGooglePlace();
}

MainActivity

 protected void getGooglePlace()
    {
        PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
        Intent intent;
        try {
            intent = builder.build(MainActivity.this);
            startActivityForResult(intent, place_picker_request);
        } catch (GooglePlayServicesRepairableException e) {
            e.printStackTrace();
        } catch (GooglePlayServicesNotAvailableException e) {
            e.printStackTrace();
        }
    }

你能告诉我在progressBar满了的时候我该怎么办?谢谢!

2 个答案:

答案 0 :(得分:2)

在onPostExecute事件中,当您从非活动类启动活动时,需要在开始活动之前添加标记:

b

答案 1 :(得分:0)

在我看来,没有必要实例化你的活动。因为这是一个糟糕的决定。您可以将异步任务作为嵌套类放入您的活动并调用getGooglePlace()方法,但这也是一个坏主意。我建议采用以下方法。

public class MyTask extends AsyncTask<Void, Void, Void> {
    private WeekReference<MyListener> mListener;

    public MyTask(MyListener listener) {
      mListener= new WeakReference<MyListener>(listener);
    }

    @Override
    protected void onPostExecute(Void result) {
      super.onPostExecute(result);
      MyListener activity = mListener.get();
      if (activity != null) {
      // do your stuff with activity here
      }
    }
  }