2014-10-29 39 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 ..感謝..