gpt4 book ai didi

java - AsyncTask 中没有任何方法被调用

转载 作者:行者123 更新时间:2023-12-02 11:39:08 25 4
gpt4 key购买 nike

我的应用程序中有 AsyncTask 的实现,但我遇到了问题。

这是我的 AsyncTask 实现:

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) {

}

}

当我调试应用程序时,我可以单步进入构造函数,但之后,onPreStart、'doInBackground'都不会被调用?

为什么会发生这种情况?

最佳答案

没有运行,因为您的代码导致 MalformedURLException

根据将代码导入 Android Studio 我得到:

 java.net.MalformedURLException: no protocol: www.blahblah.com

如果你清理它,它会工作得很好,但是你的设计有一些重大问题。

  1. 如果可以避免,AsyncTask 不会也不应该使用 Context,特别是考虑到 AS 会告诉您它正在造成泄漏。

使用回调(即与 showToast() 或 displayProgress(Integer value) 等函数的接口(interface))以避免必须执行诸如显示 Toast 之类的操作...在这里,您没有这样做无论如何,都会在您的 Toast 上调用 show() 。

  • 除了不传递 Context 之外,您绝对不应该将 View 传递到 AsyncTask 中,因为当您的 >View 消失了,但是 AsyncTask 调用 onPostExecute(Void aVoid)...应用程序将崩溃。 (如果 Context 不再有效,即 null,也可以这样说)

    请参阅使用WeakReference如果您无法删除依赖项。

  • 进行这些更改,您就一切准备就绪。

    祝你好运,编码愉快!

    关于java - AsyncTask 中没有任何方法被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48710659/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com