带有ProgressDialog的外部AsyncTask类
**更新:(见下文)**我一直在寻找几天,但找不到对此的直接答案。 有人说有可能有人说完成一些说它不是。 我对此感到疯狂。
我想要的只是让AsyncTaskTask显示进度条和外部类。 要做到这一点,我正在传递上下文,你可以在主类中看到。 但无论我尝试什么,我都会得到NullPointerException
。
工作代码示例表示赞赏。 谢谢
顺便使用Android 2.2。
主要:
import android.app.Activity; import android.os.Bundle; public class AsyncDemo extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new AsyncClass(this).execute(); } }
AsyncClass.java
import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.os.SystemClock; public class AsyncClass extends AsyncTask { private Context context; ProgressDialog dialog = new ProgressDialog(context); public AsyncClass(Context cxt) { context = cxt; } @Override protected void onPreExecute() { dialog.setTitle("Please wait"); dialog.show(); } @Override protected Void doInBackground(Void... unused) { SystemClock.sleep(2000); return (null); } @Override protected void onPostExecute(Void unused) { dialog.dismiss(); } }
更新:我有一个跟进问题:使用上面的代码,是否可以以某种方式将onPostExecute方法中的值返回给主类? (对不起,因为我正在尝试这样的事情:
String result = new AsyncClass(this).execute();
然后是一个返回字符串的方法。 但我不能这样做因为我得到了:
Type mismatch: cannot convert from AsyncTask to String
我该怎么做才能解决这个问题? 谢谢。
您正在使用空上下文创建ProgressDialog
。 以下代码对我有用。
public class AsyncClass extends AsyncTask { private Context context; ProgressDialog dialog; public AsyncClass(Context cxt) { context = cxt; dialog = new ProgressDialog(context); } @Override protected void onPreExecute() { dialog.setTitle("Please wait"); dialog.show(); } @Override protected Void doInBackground(Void... unused) { SystemClock.sleep(2000); return (null); } @Override protected void onPostExecute(Void unused) { dialog.dismiss(); } }
好吧,这就是我在使用片段时所做的。 这是你在片段中调用AsyncTask的方法:
String result=new AsyncClass(getActivity()).execute();
这就是我的AsyncTask外部类的样子:
public class AsyncClass extends AsyncTask { ProgressDialog pdialog; public AsyncClass(Context context) { pdialog = new ProgressDialog(context); } @Override protected void onPreExecute() { pdialog.setIndeterminate(true); pdialog.setCancelable(false); pdialog.setTitle("Loading Feed.."); pdialog.setMessage("Please wait.");pdialog.show(); } @Override protected String doInBackground(Void... params) { String result=null; //do your task here and generate result String return result; } @Override protected void onPostExecute(String result) { if(pdialog.isShowing()) pdialog.dismiss(); } }
@ SSZero感谢很棒的答案,帮了很多忙。
我想回答一下后续问题即
我有一个跟进问题:使用上面的代码,是否有可能从onPostExecute方法返回一个值回到主类,不知何故? (对不起,因为我正在尝试这样的事情:
String result = new AsyncClass(this).execute();
我在我的代码中做到了这一点。
AsyncClass ac=new AsyncClass(); ac.execute(""); String rslt=ac.get();
在任何地方调用此代码。
public class AsynchClass extends AsyncTask { public String result=null; @Override protected void onPreExecute() { // TODO Auto-generated method stub } protected String doInBackground(String... params) { // Do all your background task here return result; } @Override protected void onProgressUpdate(Integer... values) { } protected void onPostExecute(String result) { } }
- 以编程方式清除Android上的PhoneGap / Cordova应用程序缓存以模拟全新安装?
- 如何使Button随机移动
- 如何在Gradle构建中解决存储库证书错误
- Android系统。 如何沿对象方向移动对象(使用Vector3和Quaternion)
- Google Play服务中的LocationRequest不会更新,间隔设置为小于1秒。
- 从libgdx中的集合中检测触摸对象(移动)的最佳方法
- 由于Gradle失败,无法编译任何Android项目:找不到javax.xml.datatype.DatatypeFactory
- 以编程方式使用辅助function服务读取通知栏标题,消息
- 带字节数组键和字符串值的HashMap – containsKey()函数不起作用