2012-11-18 169 views
0

我有一個ProgressDialog,通過執行php腳本從數據庫中獲取後臺數據。 我正在使用gson Google庫。未執行FOR循環中的代碼

{"surveys":[{"id_survey":"1","question_survey":"Are you happy with the actual government?","answer_yes":"50","answer_no":"20"}],"success":1} 

然而,ProgressDialog背景治療都不盡如人意:從瀏覽器中執行時,PHP腳本運行良好

@Override 
     protected Void doInBackground(Void... params) { 
      String url = "http://192.168.1.4/tn_surveys/get_all_surveys.php"; 

      HttpGet getRequest = new HttpGet(url); 
      Log.d("GETREQUEST",getRequest.toString()); 

      try { 

       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       Log.d("URL1",url); 

       HttpResponse getResponse = httpClient.execute(getRequest); 
       Log.d("GETRESPONSE",getResponse.toString()); 
       final int statusCode = getResponse.getStatusLine().getStatusCode(); 
       Log.d("STATUSCODE",Integer.toString(statusCode)); 
       Log.d("HTTPSTATUSOK",Integer.toString(HttpStatus.SC_OK)); 
       if (statusCode != HttpStatus.SC_OK) { 
        Log.w(getClass().getSimpleName(), "Error " + statusCode + " for URL " + url); 
        return null; 
       } 

       HttpEntity getResponseEntity = getResponse.getEntity(); 
       Log.d("RESPONSEENTITY",getResponseEntity.toString()); 
       InputStream httpResponseStream = getResponseEntity.getContent(); 
       Log.d("HTTPRESPONSESTREAM",httpResponseStream.toString()); 
       Reader inputStreamReader = new InputStreamReader(httpResponseStream); 

       Gson gson = new Gson(); 
       this.response = gson.fromJson(inputStreamReader, Response.class); 

      } 
      catch (IOException e) { 
       getRequest.abort(); 
       Log.w(getClass().getSimpleName(), "Error for URL " + url, e); 
      } 

      return null; 
     } 
    @Override 
      protected void onPostExecute(Void result) { 
       super.onPostExecute(result); 
       Log.d("HELLO","HELLO"); 
       StringBuilder builder = new StringBuilder(); 
       Log.d("STRINGBUILDER","STRINGBUILDER"); 
       for (Survey survey : this.response.data) { 
        String x= survey.getQuestion_survey(); 
        Log.d("QUESTION",x); 
        builder.append(String.format("<br>ID Survey: <b>%s</b><br> <br>Question: <b>%s</b><br> <br>Answer YES: <b>%s</b><br> <br>Answer NO: <b>%s</b><br><br><br>", survey.getId_survey(), survey.getQuestion_survey(),survey.getAnswer_yes(),survey.getAnswer_no())); 

       } 

       Log.d("OUT FOR","OUT"); 
       capitalTextView.setText(Html.fromHtml(builder.toString())); 
       progressDialog.cancel(); 
      } 

HELLO登錄時顯示。 顯示STRINGBUILDER日誌。 問題日誌不顯示。 顯示OUT FOR Log。

調查類:

public class Survey { 

    int id_survey; 
    String question_survey; 
    int answer_yes; 
    int answer_no; 

    public Survey() { 

     this.id_survey = 0; 
     this.question_survey = ""; 
     this.answer_yes=0; 
     this.answer_no=0; 
    } 

    public int getId_survey() { 
     return id_survey; 
    } 

    public String getQuestion_survey() { 
     return question_survey; 
    } 

    public int getAnswer_yes() { 
     return answer_yes; 
    } 

    public int getAnswer_no() { 
     return answer_no; 
    } 


} 

響應等級:

public class Response { 

    ArrayList<Survey> data; 

    public Response() { 
     data = new ArrayList<Survey>(); 
    } 
} 

請有關爲什麼FOR循環不執行任何幫助。 謝謝你的幫助。

回答

2

任何幫助請關於爲什麼FOR循環未執行。

簡單地說:data是空的。 (所以沒有什麼的循環遍歷...)

嘗試這樣的事情,從GSON's documentation

Type listType = new TypeToken<List<String>>() {}.getType(); 
List<String> target = new LinkedList<String>(); 
target.add("blah"); 

Gson gson = new Gson(); 
String json = gson.toJson(target, listType); 
List<String> target2 = gson.fromJson(json, listType); 

我沒有用自己GSON,但也有如何的其他例子閱讀列表:

+0

但數據在該行中不爲空:'this.response = gson.fromJson(inputStreamReader,Response.class);'否?所以那裏有「調查」對象。 – androniennn

+0

這肯定是一個盲猜:D,因爲我不能從響應轉換爲ArrayList。但請查看Response構造函數,當有響應實例時,數據列表列表不爲空,它將存儲調查數據。 – androniennn

+1

在Response的構造函數中,你用'new ArrayList ();'創建一個空列表,但是你永遠不會傳遞任何數據... – Sam

0

您的onPostExecute接受一個名爲result的參數。您的for循環遍歷名爲response的實例變量中的元素。他們應該是一樣的嗎?

+0

不,他們不一樣。 – androniennn

+1

引用由執行階段更新的實例變量即將起作用並不明確。它不是AsyncTask類的特別允許的操作之一。您可以將執行階段的結果定義爲Survey,並且該參數將顯示爲onPostExecute的參數。 – emrys57

+0

請提供任何代碼建議?因爲由於某種原因,數據變量似乎是空的。 – androniennn