我的应用程序中有AsyncTask的实现,但是我遇到了问题。
这是我对AsyncTask的实现:
System.Object
以下是我的称呼方式:
public class AsyncTaskPost extends AsyncTask<URL, Void, Void> {
private View mView;
private ProgressBar mProgressbar;
private Context mContext;
public AsyncTaskPost(View view, Context context){
mView = view;
mProgressbar = (ProgressBar)mView.findViewById(R.id.progressPostUser);
mContext = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressbar.setVisibility(View.VISIBLE);
}
@Override
protected Void doInBackground(URL... urls) {
try{
Thread.sleep(5000);
return null;
}
catch (Exception ex) {
return null;
}
}
@Override
protected void onPostExecute(Void aVoid) {
Toast.makeText(mContext, "Finished", Toast.LENGTH_SHORT);
}
@Override
protected void onProgressUpdate(Void... values) {
mProgressbar.setVisibility(View.VISIBLE);
}
@Override
protected void onCancelled() {
super.onCancelled();
}
}
当我调试应用程序时,我可以进入构造函数,但之后,没有调用public void onSaveClicked(User user) {
try {
String nameTest = user.get_name();
String surnameTest = user.get_surname();
new AsyncTaskPost(mView, mContext).execute(new URL("www.blahblah.com"));
//new AsyncTaskPost(mView, mContext).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new URL("www.blahblah.com"));
}
catch (Exception ex) {
}
}
,'doInBackground'吗?
为什么会这样?
答案 0 :(得分:1)
由于您的代码导致MalformedURLException
根据将代码导入Android Studio,我得到了:
java.net.MalformedURLException: no protocol: www.blahblah.com
如果你清理它可以正常工作,但是你的设计有一些重大问题。
Context
,特别是考虑到AS会告诉您它正在创建泄漏。 使用回调(即与showToast()或displayProgress(Integer value)等函数接口)以避免必须执行诸如显示Toast
之类的操作...这里,您没有调用show( )无论如何都要Toast
。
除了不传递Context
之外,你绝对不应该将View
传递给AsyncTask
,因为当View
消失但{{1}时会发生什么调用AsyncTask
....应用程序将崩溃。 (如果Context不再有效,则可以说同样为空)
如果您无法删除相关性,请参阅使用WeakReference。
进行这些更改,您将全部完成。
祝你好运,快乐的编码!