2015-12-02 55 views
0

我试图用GET在服务器数据库中插入值, 我已经用POST使用OkHttp做了它,但在检查web服务后,我必须将它更改为GET。okHttp获取Android的问题

OkHttpClient okHttpClient = new OkHttpClient(); 

JsonArray form = new JsonArray(); 
JsonObject item = new JsonObject(); 

item.addProperty("table", "images"); 
item.addProperty("operation", "insert"); 

JsonArray params = new JsonArray(); 
JsonObject paramItem = new JsonObject(); 
paramItem.addProperty("color_id", colorId); 
paramItem.addProperty("name", name); 
params.add(paramItem); 
item.add("params", params); 
item.addProperty("transactionCompleted", true); 
form.add(item); 

RequestBody body = RequestBody.create(MIME_JSON, new Gson().toJson(form)); 
       Request request = new Request.Builder() 
         .addHeader("Accept", "application/json") 
         .url("http://www.example.com/webservice/?value=") 
         .post(body) 
         .build(); 

       okHttpClient.newCall(request).enqueue(new Callback() { 
        @Override 
        public void onFailure(Request request, IOException e) { 

        } 
        @Override 
        public void onResponse(Response response) throws IOException { 

        } 
       }); 

什么我在我的代码,以使该GET请求来改变?

这是我必须执行

http://example.com/webservice/?value= 
[{ 
    "table": "images", 
     "operation": "insert", 
     "params": [ 
     { 
      "color_id": 2 ,   
      "name": "yellow" 
     } 
     ], 
     "transactionCompleted": true 
    }] 

任何帮助,将不胜感激查询。

回答

0

要发送一个json对象,你需要一个请求体。

Okhttp库中有一个名为HttpMethod.java文件,你可以找到这些功能:

public static boolean requiresRequestBody(String method) { 
    return method.equals("POST") 
     || method.equals("PUT") 
     || method.equals("PATCH"); 
} 

public static boolean permitsRequestBody(String method) { 
    return requiresRequestBody(method) 
     || method.equals("DELETE"); // Permitted as spec is ambiguous. 
} 

正如你可以看到,GET方法不允许有身体,所以显然无法通过发送此JSON使用Okhttp库的GET方法。

+0

mhm那么我可以使用什么? – kinsell

+0

@kinsell我认为你应该尝试另一个允许GET请求中的实体的库,如果有的话。但通常不要使用GET请求与身体。 –

+0

我找不到任何GET请求与身体的例子,我甚至不能用HttpUrlConnection做到这一点,你知道任何可以做到这一点的库吗? – kinsell