2017-06-21 6 views
0

私は多くを検索しましたが、何が起こっているのか分かりません。私はこのコードの多くのバリエーションを書いており、ここには最新のものがあります。ボレーを使用してPOST JSONを実行できない

アンドロイドコード

private static void post(@NonNull String url, 
         @NonNull Context context, 
         @NonNull final JSONObject jsonRequest, 
         @NonNull final ServerConnectionAdapter serverConnectionAdapter){ 
    Log.d(TAG, "post: URL = " + url); 
    RequestQueue queue = Volley.newRequestQueue(context); 
    JsonObjectRequest postRequest = new JsonObjectRequest(
      Request.Method.POST, 
      url, 
      jsonRequest, 
      serverConnectionAdapter, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        serverConnectionAdapter.onErrorResponse(null, error); 
       } 
      }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> map = new HashMap<>(); 
      // map.put("user", json.toString()); 
      map.put("user", "{\"id\":-1,\"name\":\"Gustavo Araujo\"}"); 
      return map; 
     } 
    }; 

    queue.add(postRequest); 
} 

サーバ(Java)のコード

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    System.out.println("doPost"); 
    System.out.println("REQUEST: "); 
    for (Map.Entry<String, String[]> e : request.getParameterMap().entrySet()){ 
     System.out.print(" "); 
     System.out.println(e.getKey() + ": " + java.util.Arrays.toString(e.getValue())); 
    } 

    System.out.println("end"); 
} 

doPostメソッド出力

doPost 
REQUEST: 
end 

I'v私の画面がいつまでも出てきて、どこにエラーがあるのか​​分からないと思う。 getParams()の有無にかかわらず、多くの例が見つかりました。私は両方を試み、何も変えなかった。

ServerConnectionAdapterは、エラーリスナーとの応答を統一するために作成した抽象クラスです。私はそれが問題ではないと確信しています。なぜなら、それは私が持っているGETと完璧に働くからです。私はすでにそこnullを使用して、すべての結果を変更していないので、

String urlも表示することができません(そうでない場合は、サーバが起動されなかったであろう。

jsonRequestは問題ではありません私が言ったように、私は時間のためにこのコードを主演してきた

。、すべての私の仮定は私が助けを求めている理由です、完全に間違っている可能性があります。

+0

Android StudioのLog-catでエラーや警告が表示されますか? –

+0

[メソッド呼び出しポスト](http://imgur.com/7lmRvNK)と[出力](http://imgur.com/xRrafOP)。残りの出力は、他のデータを確認するための自分のログです。 –

答えて

0

私は間違っていました。私がdoPostメソッドを書いた方法は、私がやろうとしているものでないものがhttp://localhost:8080/something?key=valueにアクセスしたときのように、リクエストパラメータに達していました。 リクエストの本文を読む必要がありました。 Javaで、そのためには、以下のコードのようにする必要があります:

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    // Get the body of the request 
    BufferedReader reader = request.getReader(); 

    // Print each line 
    String line; 
    while ((line = reader.readLine()) != null){ 
     System.out.println(line); 
    } 
} 

手助けしようとしているためゾハイブ・ハッサンいただきありがとうございます。

0

あなたが私に言っでコメントに投稿誤り写真あなたのリクエストが成功した、モバイルSIDからの問題はありませんe。問題はサーバー側からです。リクエストを行っているときにサーバー上で実行されているが、サーバーが適切なJsonを返さないためです。それは何も戻ってこないので、あなたはその例外を取得しています。 Androidのリクエストには、代わりにJsonが必要ですが、サーバーはそれを返していません。

アプリ側から問題が発生する可能性があります。その理由は、サーバーに適切なパラメータを送信していない可能性があるからです。しかし、私が見る限り、主な問題はサーバー側からです。これらの例外はすべてサーバー側で処理されないためです。パラメータが間違っているときと同様に、パラメータが間違っていることを伝えるメッセージとともにjsonを返さなければなりません。

+0

私はそれを理解しており、今問題ではありません。私はなぜサーバーがアンドロイドからJSONを受け取っていないのかを知りたい。私が掲示したように、サーバー側からの出力は空ですが、アンドロイド側のPOSTは正しいようです。 –

+0

私はアプリケーション開発者です、私はサーバー側についてはあまりよく分かりません。しかし、私はいくつかの研究を行い、理解しようとします。何か解決策が見つかったら私はあなたに戻ってきます。 –

関連する問題