我正在尝试在Activity的onResume()事件中运行异步任务。我的目标是每次Activity进入前台时运行任务。当我在模拟器/手机中运行时,app force会在遇到onPreExecute方法中出现的ProgressDialog代码时关闭。
以下是我的活动代码:
public class PostActivity extends Activity {
private ProgressDialog progressBar;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.post);
}
public void onResume() {
super.onResume();
new LoadFeedTask().execute();
}
public class LoadFeedTask extends AsyncTask<Void, Void, Boolean> {
protected void onPreExecute() {
progressBar.setCancelable(false);
progressBar.setMessage("Logging in...");
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressBar.show();
}
@Override
protected Boolean doInBackground(Void... params) {
// TODO Auto-generated method stub
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
Log.d(TAG, "Checking Internet Connectivity");
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
protected void onPostExecute(Boolean result) {
progressBar.dismiss();
if (result == true) {
//Do Something
}
if (result == false) {
//Do Something Else
}
}
}
}
当我检查LogCat输出时,它会在progressBar.setCancelable(false)显示一个NPE。经过数小时的努力,我无法解决它。请帮忙。如果这是一个重复的问题道歉,我似乎无法在SO中找到任何与我的问题相关的问题
答案 0 :(得分:3)
尝试在preExecute
中替换ProgressDialog的全部4行with progressBar = ProgressDialog.show(PostActivity.this,“”,“登录...”,false,false);
答案 1 :(得分:0)
听起来你的应用程序在将应用程序移动到后台时会收集progressBar。在调用asynctask之前,在onResume中重新初始化progressBar变量。
实际上,当您最小化应用时,您的progressDialog可能会被关闭。检查并确保它在启动时实际打开。无论哪种方式,你都会获得NPE,因为progressBar不存在,你需要找到它并将其恢复。
答案 2 :(得分:0)
你宣布了
private ProgressDialog progressBar;
但它从未初始化(没有任何实例), 所以它实际上是一个NULL指针。
在onCreate()
方法
progressBar = new ProgressDialog(this, ProgressDialog.STYLE_SPINNER);
将解决您的问题。
答案 3 :(得分:0)
如果你想在ProgressDialog
或你班级的其他任何地方使用相同的onPostExecute
。因此,您只需将其定义为progress = new ProgressDialog(RemoteActivity.this);
它会起作用,你可以在任何地方使用它。