Java onPostExecute不打开意图

Java onPostExecute不打开意图,java,android,android-asynctask,Java,Android,Android Asynctask,基本上,我使用AsyncTask来显示进度条,在进度为10之后,它应该运行位于MainActivity中的方法。当progressBar为10/10时,会导致以下错误崩溃 java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()” MapProgressTask @Override protec

基本上,我使用AsyncTask来显示
进度条
,在
进度
10
之后,它应该运行位于
MainActivity
中的方法。当
progressBar
10/10
时,会导致以下错误崩溃

java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()”

MapProgressTask

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

 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
已满时,您能告诉我如何运行该方法吗?谢谢

在onPostExecute事件中,当您从非活动类启动活动时,需要在启动活动之前添加一个标志:

protected void getGooglePlace()
{
    PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
    Intent intent;
    try {
        intent = builder.build(MainActivity.this);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //Needed when starting an activity from a non-activity class
        startActivityForResult(intent, place_picker_request);
    } catch (GooglePlayServicesRepairableException e) {
        e.printStackTrace();
    } catch (GooglePlayServicesNotAvailableException e) {
        e.printStackTrace();
    }
}

在我看来,没有必要实例化您的活动。因为这是个错误的决定。您可以将异步任务作为嵌套类放到活动中,并调用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
      }
    }
  }
公共类MyTask扩展了AsyncTask{
私人周刊;
公共MyTask(MyListener侦听器){
mListener=新的WeakReference(侦听器);
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
MyListener活动=mListener.get();
if(活动!=null){
//在这里进行活动
}
}
}

MainActivity MainActivity=新建MainActivity();?你想做什么?千万不要试图实例化你的活动来执行这个活动中的方法。在一个公共的独立类中创建该方法……不要自己创建活动的实例。因此,首先,删除以下行:
MainActivity MainActivity=newmainActivity();mainActivity.getGooglePlace()。然后,决定启动此其他活动的更好计划(例如,
静态
方法,将
上下文
作为参数)。在运行
AsyncTask
时,请务必考虑配置更改的可能性(例如,用户旋转屏幕)。我认为在这种情况下不需要
FLAG\u ACTIVITY\u NEW\u TASK
。正如您的评论所指出的,当活动由非活动
上下文启动时,这是必需的,我们没有证据表明情况如此。