2011-11-23 97 views
1

我將數據發送到使用下面的代碼的服務器:如何從服務器接收返回的JSON數據?

HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost(URL); 

    try { 

     HttpResponse response = httpclient.execute(httppost); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
    } 
} 

服務器是給我JSON響應,我怎麼能收集發回給我的數據。

感謝

感謝

+0

如果您使用的是json,那麼以下鏈接可能會幫助您[使用Android虛擬化WCF服務](http://fszlin.dymetis.com/post/2010/05/10/Comsuming-WCF-Services-With-Android。 aspx) – Shruti

+0

檢查此鏈接 - http://stackoverflow.com/questions/7428950/how-to-get-the-data-from-the-serverlocalhost-using-json – Praveenkumar

回答

2

這可能是有用的。

public class RestClient { 

    public enum RequestMethod { 
     GET, 
     POST 
    } 

    private ArrayList <NameValuePair> params; 
    private ArrayList <NameValuePair> headers; 

    private String url; 

    private int responseCode; 
    private String message; 

    private String response; 

    public String getResponse() { 
     return response; 
    } 

    public String getErrorMessage() { 
     return message; 
    } 

    public int getResponseCode() { 
     return responseCode; 
    } 

    public RestClient(String url) 
    { 
     this.url = url; 
     params = new ArrayList<NameValuePair>(); 
     headers = new ArrayList<NameValuePair>(); 
    } 

    public void AddParam(String name, String value) 
    { 
     params.add(new BasicNameValuePair(name, value)); 
    } 

    public void AddHeader(String name, String value) 
    { 
     headers.add(new BasicNameValuePair(name, value)); 
    } 

    public void Execute(RequestMethod method) throws Exception 
    { 
     switch(method) { 
      case GET: 
      { 
       //add parameters 
       String combinedParams = ""; 
       if(!params.isEmpty()){ 
        combinedParams += "?"; 
        for(NameValuePair p : params) 
        { 
         String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),"UTF-8"); 
         if(combinedParams.length() > 1) 
         { 
          combinedParams += "&" + paramString; 
         } 
         else 
         { 
          combinedParams += paramString; 
         } 
        } 
       } 

       HttpGet request = new HttpGet(url + combinedParams); 

       //add headers 
       for(NameValuePair h : headers) 
       { 
        request.addHeader(h.getName(), h.getValue()); 
       } 

       executeRequest(request, url); 
       break; 
      } 
      case POST: 
      { 
       HttpPost request = new HttpPost(url); 

       //add headers 
       for(NameValuePair h : headers) 
       { 
        request.addHeader(h.getName(), h.getValue()); 
       } 
       JSONObject jo = new JSONObject(); 


       if(!params.isEmpty()){ 
        for (int i = 0; i < params.size();i++) 
        { 
         jo.put(params.get(i).getName(),params.get(i).getValue()); 


        } 
        StringEntity se = new StringEntity(jo.toString()); 
        se.setContentType("text/xml"); 
        se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); 

        request.setEntity(se); 
        //request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 
       } 

       executeRequest(request, url); 
       break; 
      } 
     } 
    } 

    private void executeRequest(HttpUriRequest request, String url) 
    { 
     //HttpClient client = new DefaultHttpClient(); 
     HttpClient client = HttpClientFactory.getThreadSafeClient(); 

     HttpResponse httpResponse; 

     try { 
      httpResponse = client.execute(request); 
      responseCode = httpResponse.getStatusLine().getStatusCode(); 
      message = httpResponse.getStatusLine().getReasonPhrase(); 

      HttpEntity entity = httpResponse.getEntity(); 

      if (entity != null) { 

       InputStream instream = entity.getContent(); 
       response = convertStreamToString(instream); 

       // Closing the input stream will trigger connection release 
       instream.close(); 
      } 

     } catch (ClientProtocolException e) { 
      client.getConnectionManager().shutdown(); 
      e.printStackTrace(); 
     } catch (IOException e) { 
      client.getConnectionManager().shutdown(); 
      e.printStackTrace(); 
     } 
    } 

    private static String convertStreamToString(InputStream is) { 

     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 

     String line = null; 
     try { 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       is.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return sb.toString(); 
    } 

HttpClientFactory:

public class HttpClientFactory { 

    private static DefaultHttpClient client; 

    public synchronized static DefaultHttpClient getThreadSafeClient() { 
     if (client != null) 
      return client; 
     client = new DefaultHttpClient(); 
     ClientConnectionManager mgr = client.getConnectionManager(); 
     HttpParams params = client.getParams(); 
     client = new DefaultHttpClient(new ThreadSafeClientConnManager(params, 
       mgr.getSchemeRegistry()), params); 
     return client; 

    } 
} 

現在,調用它,你只需使用:

RestClient c = new RestClient("http://somewebsite.com/register"); 
    c.AddHeader("Accept", "application/json"); 
    c.AddHeader("Content-type", "application/json"); 
    c.AddParam("UserName", user); 
    c.AddParam("Password", password); 
    c.Execute(RequestMethod.POST); 

    JSONObject userKey = new JSONObject(c.getResponse()); 

現在你有一個線程安全的,相當容易使用一組類,您可以使用調用您的服務並提取您的JSON數據。

0

我都以不同的方式做這件事,但它的工作:

HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost(URL); 
    ResponseHandler<String> res = new BasicResponseHandler(); 
    String response = ""; 


    try { 
// reponse string contains all the json data 
     response = httpclient.execute(httppost,res); 

    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
    } 
相關問題