2012-03-15 4 views
0

ウェブサイトからシリアル化されたJSONデータを解析します:http://demos.brianbuikema.com/apps/soa_services/employees?format=JSON 私の結果は、サイトのソースコードhttp://demos.brianbuikema.com/apps/soa_services/employeesですか? 私のパラメータformat = JSONのどこかで削除されます。しかし、私はどのように考えているのですかenHttpgetはパラメータを削除します

これは私のコードですlog.dを気にしないでください、それは私がデバッグをデバッグしているときだけです。 '

HttpClient httpclient = new DefaultHttpClient(); 

    // Prepare a request object 


    HttpGet httpget = new HttpGet("http://demos.brianbuikema.com/apps/soa_services/employees?format=JSON"); 

    String result = null; 
    try { 
     // execute the request 
     Log.d("buh", "2aa"); 
     HttpResponse response = httpclient.execute(httpget); 
          Log.d("buh", "2a"); 
     // Get hold of the response entity 
     HttpEntity entity = response.getEntity(); 
     // If the response does not enclose an entity, there is no need 
     // to worry about connection release 
     Log.d("buh", "2b"); 
     if (entity != null) { 
      // A Simple Response Read 
      Log.d("buh", "2c"); 
      InputStream instream = entity.getContent(); 
      result = convertStreamToString(instream); 
      Log.d("buh",result); 
      // Closing the input stream will trigger connection release 
      instream.close(); 
     } 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return result; 
} 

private static String convertStreamToString(InputStream is) { 
    /* 
    * To convert the InputStream to String we use the 
    * BufferedReader.readLine() method. We iterate until the BufferedReader 
    * return null which means there's no more data to read. Each line will 
    * appended to a StringBuilder and returned as String. 
    */ 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is), 
      8192); 
    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(); 
} ` 

答えて

1

このURLを要求するときに間違いがサーバからだった、それはヘッダJSONを取り除き、 ので、あなたが追加する必要があります。 httpget.addHeader(new BasicHeader("Accept", "application/json"));をHTTPGET

の下で、ここでは完全なコードです:

HttpClient httpclient = new DefaultHttpClient(); 

    // Prepare a request object 
    HttpGet httpget = new HttpGet(url); 
    httpget.addHeader(new BasicHeader("Accept", "application/json")); 
    //httpget.getParams().setParameter("format", "JSON"); 

    Log.d("z",httpget.getURI().toString()); 

    // Execute the request 
    HttpResponse response; 

    String result = null; 
    try { 
     response = httpclient.execute(httpget); 

     // Get hold of the response entity 
     HttpEntity entity = response.getEntity(); 
     // If the response does not enclose an entity, there is no need 
     // to worry about connection release 

     if (entity != null) { 
      // A Simple Response Read 
      InputStream instream = entity.getContent(); 
      result = convertStreamToString(instream); 
      Log.d("z",result); 
      // Closing the input stream will trigger connection release 
      instream.close(); 
     } 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return result; 
} 

private static String convertStreamToString(InputStream is) { 
    /* 
    * To convert the InputStream to String we use the BufferedReader.readLine() 
    * method. We iterate until the BufferedReader return null which means 
    * there's no more data to read. Each line will appended to a StringBuilder 
    * and returned as String. 
    */ 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is), 8192); 
    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(); 
} 
+0

優秀な答え! –

0

名前の値のペアを設定する必要があります。次のとおりです。

protected String doInBackground(String... params) { 
     String result = ""; 
     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
// REPLACE param [0] or one with your value of variable like _userid or etc.. 
     nameValuePairs.add(new BasicNameValuePair("userid",params[0])); 

     try { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://thisismywebsite.com/mypage.php"); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       is = entity.getContent(); 
     } catch(Exception e){ 
       Log.e("log_tag", "Error in http connection "+e.toString()); 
     } 

     try { 
       BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
       } 
       is.close();  
       result=sb.toString().trim();     
     } catch(Exception e){ 
       Log.e("log_tag", "Error converting result "+e.toString()); 
     } 

     return result; 
    } 

私は、うまくいくと思います。

+0

HttpGet httppost =新しいHttpGet( "http://demos.brianbuikema.com/apps/soa_services/employees"); HttpGet .setEntity(新しいUrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(HttpGet); あなたはHttpGet httpostに名前を付けますが、使用しませんか? HttpGet.setEntityは存在しませんか? – user1264255

+0

申し訳ありません。実際には、私のコードを貼り付けたので、 'HttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet( "http://demos.brianbuikema.com/apps/soa_services/employees"); httpget.setEntity(新しいUrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httpget); ' –

+0

問題はありません:)しかし、まだ httpget.setEntity(新しいUrlEncodedFormEntity(nameValuePairs)); は機能しません。 setEntity(UrlEncodedFormEntity)メソッドは、HttpGetタイプのために未定義です – user1264255

関連する問題