2012-03-27 12 views
0

Content-Typeをapplication/jsonに設定し、名前と電子メールをいくつかのキーとして設定したいサーバーにPOSTリクエストを実行しようとしています。現在、406エラーが発生していますが、これはサーバー側で作業していると仮定していますが、アンドロイドは応答を処理できません。どのようにコードを微調整して200の応答を得ることができますか?アンドロイドのjsonでこのPOST要求に問題がありますか?

HttpClient client = new DefaultHttpClient(); 
HttpEntity entity; 

try{ 
    JSONObject j = new JSONObject(); 
    j.put("name" , myName); 
    j.put("email", myEmail); 

    HttpPost post = new HttpPost(targetURL); 
    post.setHeader("Content-Type", "application/json"); 

    StringEntity se = new StringEntity(j.toString(), HTTP.UTF_8); 
    se.setContentType("application/json"); 
    post.setEntity(se); 

    HttpResponse response = client.execute(post); 
    entity = response.getEntity(); 

    Log.d("response", response.getStatusLine().toString()); 
} catch(Exception e){Log.e("exception", e.toString());} 

これは正しく表示されますか。 HttpClientを作成するときに、これらの応答ハンドラの1つが必要ですか?

+0

どのサーバーにポストしていますか?それを制御するのか、それともそのコードを持っていますか?あなたはサーバーが受け取っているものを確認できますか?サーバーやそのコードにアクセスできない場合は、開発マシンにTomcatインスタンスを設定し、それを使ってテストすることができます。 –

+0

はJSONキー名が正しいですか?送信する必要がある追加のヘッダーがありますか? – dldnh

+0

残念ながら、私はサーバーにアクセスできません。私は他のヘッダ(このヘッダを受け入れるなど)を送る必要があるかどうかもわかりません – nectarsac

答えて

0

これは、JSON-2.0.jar

 HttpClient client = new DefaultHttpClient(); 
     HttpConnectionParams.setConnectionTimeout(client.getParams(), MyApplication.HTTP_TIMEOUT); //Timeout Limit 
     HttpResponse response; 
     ArrayList<appResults> arrayList = new ArrayList<appResults>(); 
     String resul; 
     try{ 

      HttpGet get = new HttpGet(urls[0]); 


      response = client.execute(get); 
      /*Checking response */ 
      if(response!=null){ 
       InputStream in = response.getEntity().getContent(); //Get the data in the entity 
       resul = convertStreamToString(in); 
       Gson gson = new Gson();     
       Type listType = new TypeToken<ArrayList<appResults>>() {}.getType(); 
       arrayList = gson.fromJson(resul, listType); 
       in.close(); 

もちろんのasynctaskまたはスレッド内で私のために動作します。 しかし、406 ...あなたのウェブサーバーとあなたのアプリケーションのフォーマットが一貫していないようです...

+0

'converStreamToString()'に何があっても、それは正しいものではありません。 [EntityUtils.toString(response.getEntity())](http://developer.android.com/reference/org/apache/http/util/EntityUtils.html#toString(org.apache.http.HttpEntity))を使用してください。それはコードが少なく、サーバーが送信した文字エンコーディングに従うからです。 –

+0

唯一のことは、取得リクエストを実行していることです。私はそれをHttpPostに切り替えるべきですか? – nectarsac

関連する問題