AsyncTask中没有方法被调用

时间:2018-02-09 16:57:38

标签: java android android-asynctask

我的应用程序中有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'吗?

为什么会这样?

1 个答案:

答案 0 :(得分:1)

由于您的代码导致MalformedURLException

,因此无法运行

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

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

如果你清理它可以正常工作,但是你的设计有一些重大问题。

  1. 如果可以避免,AsyncTask不会也不应该使用Context,特别是考虑到AS会告诉您它正在创建泄漏。
  2. 使用回调(即与showToast()或displayProgress(Integer value)等函数接口)以避免必须执行诸如显示Toast之类的操作...这里,您没有调用show( )无论如何都要Toast

    1. 除了不传递Context之外,你绝对不应该将View传递给AsyncTask,因为当View消失但{{1}时会发生什么调用AsyncTask ....应用程序将崩溃。 (如果Context不再有效,则可以说同样为空)

      如果您无法删除相关性,请参阅使用WeakReference

    2. 进行这些更改,您将全部完成。

      祝你好运,快乐的编码!