0

こんにちはボレーを使ってCouchDbでドキュメントを作成しようとしましたが、POSTメソッドとPUTメソッドの両方に問題があります。ボレーでCouchDbドキュメントを作成する

String url = "http://serverurl:port/database/"; 

    StringRequest request = new StringRequest(Request.Method.POST 
      , url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      System.out.println(response); 
     } 
    }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.e("Volley", "onErrorResponse: ", error); 
       } 
      }) 
    { 
    @Override 
    public Map<String,String> getHeaders()throws AuthFailureError { 
     Map<String, String> params = new HashMap<>(); 
     params.put("Accept-Charset", AppConfig.CHARSET); 
     params.put("Content-Type", "application/json"); 
     String encoding = Base64.encodeToString(AppConfig.SERVER_COUCHDB_AUTHENIFICATIONDATA.getBytes(Charset.forName("utf-8")), Base64.DEFAULT); 
     params.put("Authorization","Basic "+ encoding);; 
     return params; 
    } 

     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> map = new HashMap<>(); 
      map.put("VolleyTest","Hello CouchDB"); 
      return map; 
     } 


    }; 

    Volley.newRequestQueue(this).add(request); 

私はLogcatで次のエラーを取得する:

07-14 15:44:06.599 2003-2064/de.game_wordit.wordit E/Volley: [361] BasicNetwork.performRequest: Unexpected response code 415 for MYURL 
07-14 15:44:06.603 2003-2003/de.game_wordit.wordit E/Volley: onErrorResponse: 
                 com.android.volley.ServerError 
                  at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:163) 
                  at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 

私はPUTリクエストでPUT要求

String url = "http://serverurl:port/database/"; 

    StringRequest request = new StringRequest(Request.Method.PUT 
      , url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      System.out.println(response); 
     } 
    }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.e("Volley", "onErrorResponse: ", error); 
       } 
      }) 
    { 
    @Override 
    public Map<String,String> getHeaders()throws AuthFailureError { 
     Map<String, String> params = new HashMap<>(); 
     params.put("Accept-Charset", AppConfig.CHARSET); 
     params.put("Content-Type", "application/json"); 
     String encoding = Base64.encodeToString(AppConfig.SERVER_COUCHDB_AUTHENIFICATIONDATA.getBytes(Charset.forName("utf-8")), Base64.DEFAULT); 
     params.put("Authorization","Basic "+ encoding);; 
     return params; 
    } 

     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> map = new HashMap<>(); 
      map.put("VolleyTest","Hello CouchDB"); 
      return map; 
     } 


    }; 

    Volley.newRequestQueue(this).add(request); 

をしようとした場合、これはエラーです:

07-14 15:47:42.221 5144-5187/de.game_wordit.wordit E/Volley: [365] BasicNetwork.performRequest: Unexpected response code 412 for MYURL`07-14 15:47:42.223 5144-5144/de.game_wordit.wordit E/Volley: onErrorResponse: 
                 com.android.volley.ServerError 
                  at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:163) 
                  at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 

私も `JsonObjectRequest bそれもうまくいかず、同じエラーが出ます。

答えて

0

私は自分で何かを考え出した:これで

String url = "http://url:port/database/docname"; 
    Map<String, String> map = new HashMap<>(); 
    map.put("a","b"); 
    final JSONObject json= new JSONObject(map); 

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.PUT 
      , url,json, new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      System.out.println(response); 
     } 
    }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.e("Volley", "onErrorResponse: ", error); 
        Log.e("Volley", "onErrorResponse: "+new String(error.networkResponse.data,StandardCharsets.UTF_8)); 
       } 
      }) 
    { 
    @Override 
    public Map<String,String> getHeaders()throws AuthFailureError { 
     Map<String, String> params = new HashMap<>(); 
     params.put("Accept-Charset", AppConfig.CHARSET); 
     params.put("Content-Type", "application/json"); 
     params.put("Accept","application/json"); 
     String encoding = Base64.encodeToString(AppConfig.SERVER_COUCHDB_AUTHENIFICATIONDATA.getBytes(Charset.forName("utf-8")), Base64.DEFAULT); 
     params.put("Authorization","Basic "+ encoding);; 
     return params; 
    } 

     @Override 
     public byte[] getBody() { 
      return json.toString().getBytes(); 
     } 
    }; 
    String str = new String(request.getBody(), StandardCharsets.UTF_8); 
    Log.i("iii", "onCreate:" +str); 
    Volley.newRequestQueue(this).add(request); 

を使用すると、固定されたIDを持つドキュメントを作成することができます。 URLにIDを入力しないと、プログラムはデータベースを作成しようとします。通常は、Doc IDを残しておけば、CouchDbによって作成されたIDを持つ文書を作成することができます。しかし、これは私にとってはうまくいかない。 しかし私は自分でDoc IDを設定する必要があるので、これで暮らすことができます。

関連する問題