异步任务在方法上返回null

时间:2014-10-29 21:10:02

标签: android android-asynctask

问题是我的方法从doInBackground返回0到onPostExecute,我尝试了很多但是没有得到如何解决它,请帮助

 @Override
  protected String doInBackground(String... params) {
  makeCount(URL_ORDERS_US,count);
  return null;
  }

这是方法

 public void makeCount(String uri,int countnow){
        List<NameValuePair> paramUS = new ArrayList<NameValuePair>();
        JSONObject json = jsonParser.makeHttpRequest(uri, "GET", paramUS, SavedToken);
        try {
            JSONObject data = json.getJSONObject("data");
            JSONObject orders = data.getJSONObject("orders");
            Iterator<String> orderIterator = orders.keys();
            while (orderIterator.hasNext()) {
                try{
                JSONObject c = orders.getJSONObject(orderIterator.next());
                countnow++;
                }
                catch(Exception e){
                    e.printStackTrace();
                }
            }
        }catch (JSONException e){e.printStackTrace();}
    }

和onPostExecute

 @Override
        protected void onPostExecute(String s) {
        usac.setText(String.valueOf(count));
        pDialog.dismiss();
        }

3 个答案:

答案 0 :(得分:0)

CountNow通过java中任何其他参数的值传递。将其声明为已创建的asynctask cuatom类的成员,因为您只是修改本地副本而不是您想要实现的全局行为

答案 1 :(得分:0)

您的doInBackground返回null。 nullonPostExecute的参数。请注意,您在onPostExecute中根本没有使用String的参数。您使用String.valueOf(count)。 `count'来自哪里?

这是AsyncTask的成员变量吗?如果是,它应该工作 - 根据 https://developer.android.com/reference/android/os/AsyncTask.html 内存可观察性

但是您的count成员变量永远不会被修改。您可以修改其副本 - makeCount函数的countnow参数。

请参阅Is Java "pass-by-reference" or "pass-by-value"?,了解讨论参数如何传递给函数的问题。

答案 2 :(得分:0)

先生?,请这样做..

public void makeCount(String uri,int countnow){
    List<NameValuePair> paramUS = new ArrayList<NameValuePair>();
    JSONObject json = jsonParser.makeHttpRequest(uri, "GET", paramUS, SavedToken);
    try {
        JSONObject data = json.getJSONObject("data");
        JSONObject orders = data.getJSONObject("orders");
        Iterator<String> orderIterator = orders.keys();
        while (orderIterator.hasNext()) {
            try{
            JSONObject c = orders.getJSONObject(orderIterator.next());
            publishProgress(countnow++);
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
    }catch (JSONException e){e.printStackTrace();}
}

然后是您的发布进度

  @Override
  protected Integer onProgressUpdate(Integer... values) { // the integer means it takes int as a value..
    // TODO Auto-generated method stub
    super.onProgressUpdate(values);
    //this methos updates the ui like the postexecute, just that in here you do,temporary
    //updates
}

我发布了这段代码,因为我的理解是你想要用价值或次数做点什么,这就是为什么我发布它,我的理解可能是错的,如果我错了,请告诉我,Sir Alex先生。

注意:可能存在愚蠢的错误,所以请更正它们,比如拼写或代码格式,我这样做没有和编辑..谢谢..