2014-10-29 43 views
-2

返回null问题是,我从doInBackground返回0到onPostExecute方法,我尝试了很多,但dind't获得如何解决它,请帮助AsynkTask的方法

@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(); 
     } 
+0

线“返回NULL;”总是要返回null,我不明白你想要做什么 – panini 2014-10-29 21:14:16

+0

我想计算json对象实体的数量,当方法找到它时,它会执行++,我想从方法中发送值do在后台执行onPostExecute – Alex 2014-10-29 21:16:57

+0

删除'int countnow'参数并将其移出该方法。 – eduyayo 2014-10-29 21:29:14

回答

0

CountNow通过值传递如JA任何其他参数的VA。将它声明为我创建的asynctask cuatom类的成员,因为您只是修改本地副本而不是您希望实现的全局行为

+0

先生你可以给一个链接引用请,我din't quete理解你,因为我没有关于这个问题 – Alex 2014-10-29 21:24:15

0

您的doInBackground返回null。那null是你的onPostExecute的论点。请注意,您在onPostExecute中完全没有使用String的参数。您使用String.valueOf(count)。 “count”来自哪里?

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

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

Is Java "pass-by-reference" or "pass-by-value"?对于其中的参数将如何传递的功能,它被讨论的问题。

+0

计的价值来自makeCount方法的知识,计数被声明为全局变量 – Alex 2014-10-29 21:23:33

+0

@Alex我回答你的提问。编辑我的文章。您只修改参数_countnow_不是成员变量_count_。 – 2014-10-29 21:38:47

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 
} 

我张贴了这个代码,因为我从你的理解是,你想要做什么与值或次数,这就是为什么我张贴,我的理解可能是错误的,如果我错了,让我知道,爵爷..

注意:有可能是愚蠢的错误,所以PLE ASE纠正他们,像拼写或代码打印格式,我这样做不和edittor ..感谢..