不调用onPostExecute。什么是适当的参数?

时间:2018-01-11 08:02:55

标签: android android-asynctask

我很震惊这个问题,在从doInBackground成功返回时, onPostExecute只是没有被执行

我读过this StackOverflow answer,其中说params存在问题。但是,我无法弄清楚原因。我一直在运行许多AsyncTasks,但从未遇到过这样的问题。 其他类似的SO答案也无济于事

以下是我的代码。我在companyVO中成功获得价值的地方。 请帮我解决这个问题。

我觉得这与参数有关。即使 postExecute上的@Override注释显示错误

class companyCall extends AsyncTask<Void, Void, ArrayList<CompanyVO.ResultSet>> {


        protected ArrayList<CompanyVO.ResultSet> doInBackground(Void...params) {
            SharedPreferences prefrence = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            String Token = prefrence.getString("token", "");
            try {
                WebserviceImpl webservices = new WebserviceImpl();
                companyVO = webservices.getAllCompanyINfo(Token, getApplicationContext());

            } catch (Exception e) {
                Log.e("TAG", "Exception", e);
                return null;
            }
            return companyVO;
        }


        protected void onPostExecute(CompanyVO.ResultSet result) {
            if (result != null) {

                Log.e("Done", "done"+result.getName());

            } else {
                Log.e("Error", "Not done");
            }
        }

    }

2 个答案:

答案 0 :(得分:3)

你错过了@Override。所以它不是覆盖的方法,你也使用了不同的参数。它应该是。

class CompanyCall extends AsyncTask<Void, Void, ArrayList<CompanyVO.ResultSet>> {
    @Override
    protected ArrayList<CompanyVO.ResultSet> doInBackground(Void...params) {
        SharedPreferences prefrence = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        String Token = prefrence.getString("token", "");
        try {
            WebserviceImpl webservices = new WebserviceImpl();
            companyVO = webservices.getAllCompanyINfo(Token, getApplicationContext());

        } catch (Exception e) {
            Log.e("TAG", "Exception", e);
            return null;
        }
        return companyVO;
    }
    @Override
    protected void onPostExecute(ArrayList<CompanyVO.ResultSet> result) {
        if (result != null) {
            Log.e("Done", "done"+result.getName());
        } else {
            Log.e("Error", "Not done");
        }
    }

}

答案 1 :(得分:1)

你的结果是Arraylist,用forloop访问它

class CompanyCall extends AsyncTask<Void, Void, ArrayList<CompanyVO.ResultSet>> {
    @Override
    protected ArrayList<CompanyVO.ResultSet> doInBackground(Void...params) {
        SharedPreferences prefrence = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        String Token = prefrence.getString("token", "");
        try {
            WebserviceImpl webservices = new WebserviceImpl();
            companyVO = webservices.getAllCompanyINfo(Token, getApplicationContext());

        } catch (Exception e) {
            Log.e("TAG", "Exception", e);
            return null;
        }
        return companyVO;
    }
    @Override
    protected void onPostExecute(ArrayList<CompanyVO.ResultSet> result) {
        if (result != null) {
            for(CompanyVO.ResultSet result_:result) {

                Log.e("Done", "done"+result_.getName());
            }
        } else {
            Log.e("Error", "Not done");
        }
    }

}