【发布时间】:2017-08-07 02:31:24
【问题描述】:
我正在尝试将 Fragment 转换为 Activity,但遇到了一些麻烦。 我有 3 个使用 Intent 运行的活动:
MainActivity -> DetailsActivity -> MyPagerActivity
PagerActivity 做了一些 UI 工作,并在最后调用 AsyncTask 将一些数据发送到我的服务器。我的 ASyncTask 在一个单独的 Java 文件中,我使用“MyPagerActivity.this”作为上下文调用该函数:
NetFuncs nu = new NetFuncs();
...
nu.FinishWork(MyPagerActivity.this, workData1, WorkData2);
在 NetFuncs 中:
private Context mContext;
....
public void FinishWork(Context context, String Data1, long Data2) {
if (networkUtils.isNetworkAvailable(context)) {
new FinishWorkServerCall(context, Data1, Data2).execute();
}
private class FinishWorkServerCall extends AsyncTask<Void, Void, Void> {
public class FinishWorkServerCall (Context context, String Data1, long Data2) {
mContext = context;
...
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(mcontext);
pDialog.setMessage("Finishing your work...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
....
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if ( pDialog != null && pDialog.isShowing()) {
pDialog.dismiss();
pDialog = null;
}
}
在 Fragment 世界中,一切都很顺利。一旦我转移到一个独立的活动,就在 pDialog.show();应用程序崩溃并出现以下错误:
Activity com.example.MyPagerActivity has leaked window com.android.internal.policy.PhoneWindow$DecorView{7acbcb8 V.E...... R......D 0,0-1026,348} that was originally added here
我用谷歌搜索了很多,每个人都在谈论 postExecute() 和 onDestroy() 中的解雇,我正在做这两个,但它没有帮助。 我认为问题是上下文问题,但我不知道问题可能是什么以及如何解决它。我用过getApplicationContext()、getBaseContext(),都没有用。 我用 Toast() 代替了同样的问题,所以我猜这是一个 contetx 问题。
编辑: pDialog 正在进行时,MyPagerActivity 没有关闭或完成。它保持不变。
有人可以帮我找出问题所在并帮助找到解决方案吗?
谢谢
【问题讨论】:
-
添加完整的日志跟踪。
-
在fragment中添加FinishWork调用的代码
标签: android android-fragments android-asynctask