2014-01-23 17 views
0

嘿,我正在嘗試調用一個JSON對象的http獲取我通過我的異步任務,但我很難找出如何得到響應,更重要的是如何將即可通過它發送請求...http與android的異步與JSON對象獲取

這裏是我當前的代碼:

private class search_send extends AsyncTask<JSONObject, Integer, Double> { 
       // private ProgressDialog dialog 
       ProgressDialog progress_search = new ProgressDialog(search.this); 

       @Override 
       protected void onPreExecute() { 
         progress_search.setMessage("Uploading..."); 
         progress_search.show(); 
       } 

       protected Double doInBackground(JSONObject... params) { 
         // TODO Auto-generated method stub 
         get_search(params[0]); 
         return null; 
       } 

       protected void onPostExecute(Double result) { 
         progress_search.dismiss(); 
         Toast.makeText(search.this, "Search sending...", Toast.LENGTH_LONG) 
             .show(); 
       } 

       public void get_search(JSONObject search_data) { 

         // Create a new HttpClient and Post Header 
         HttpParams httpParams = new BasicHttpParams(); 
         HttpClient httpclient = new DefaultHttpClient(httpParams); 

         HttpGet httpget = new HttpGet("http://10.0.2.2:3000/search"); 

         try { 
           // add data 
           StringEntity se = new StringEntity(search_data.toString()); 
           se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, 
               "application/json")); 
           httpget .setEntity(se); 

           // execute http request 
           HttpResponse response = httpclient.execute(httpget); 


         } catch (ClientProtocolException e) { 
           Log.e("sds", e.getMessage()); 
         } catch (IOException e) { 
           Log.e("sds 22", e.getMessage()); 
         } 
       } 
     } 

需要這條線作爲獲取具有像這樣沒有方法改變,即使我用它爲我的http post ...

httpget .setEntity(se); 

因此,如果有人能告訴我我在做什麼錯了,以及如何處理迴應......這將是偉大的。

+1

您忘記了@覆蓋嗎?你的'doInBackground'和'onPostExecute'方法? – Fred

回答

0

試試這個

HttpResponse response = httpclient.execute(httpget); 
HttpEntity entity = response.getEntity(); 
String result = EntityUtils.toString(entity) 

這應該給你的結果字符串

0

我使用這些

public static String asString(HttpResponse response) throws IOException { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
    try{ 
    StringBuilder sb = new StringBuilder(); 
    String line = null; 
    while(null != (line = reader.readLine())) sb.append(line); 
    return sb.toString().trim(); 
    }finally{ 
    reader.close(); 
    } 
} 

public static JSONObject asJSON(HttpResponse response) throws IOException, JSONException { 
    return new JSONObject(asString(response)); 
} 
0

最後我做這個,這似乎很好地工作:

private class search_send extends AsyncTask<String, Void, String> { 
     // private ProgressDialog dialog 
     ProgressDialog progress_search = new ProgressDialog(search.this); 

     @Override 
     protected void onPreExecute() { 
      progress_search.setMessage("Uploading..."); 
      progress_search.show(); 
     } 

     protected String doInBackground(String... search_data) { 
      String url = "http://10.0.2.2:3000/search?data=" 
        + search_data[0]; 
      Log.e(" more ", "what " + search_data[0]); 
      String response = ""; 
      DefaultHttpClient client = new DefaultHttpClient(); 

      try { 
       Log.e("did we hit", "check " + url); 
       HttpGet httpGet = new HttpGet(url); 
       ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
       response = client.execute(httpGet, responseHandler); 
       Log.e(" more ", "what " + response); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return response; 
     } 

     protected void onPostExecute(String result) { 
      progress_search.dismiss(); 
      Toast.makeText(search.this, "Search sending..." + result, 
        Toast.LENGTH_LONG).show(); 
     } 

    } 
+0

讓我知道是否可以有一個問題,我沒有意識到或什麼... – Lion789