基本上我使用AsyncTask来显示progressBar
,在progress
为10
之后,它应该运行位于MainActivity
的方法。如果progressBar
为10/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
满了的时候我该怎么办?谢谢!
答案 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
}
}
}