簡體   English   中英

在Android中發送“ PUT”請求以休息api

[英]Send “PUT” request in Android to rest api

我有一個android應用程序,可以咨詢並輕松地將其插入Web服務。 所有這些都是通過apache HTTPClient和JSON實現的。

因此,例如,我將一個新用戶插入db。

HttpClient httpclient = new DefaultHttpClient();
        // 2. make POST request to the given URL
            HttpPost httpPost = new HttpPost(url);
            String json = "";
            // 3. build jsonObject
            JSONObject jsonObject2 = new JSONObject();
            jsonObject2.put("name", name);
            jsonObject2.put("number", num);
         // 4. convert JSONObject to JSON to String
            json = jsonObject.toString();
        // 5. set json to StringEntity
            StringEntity se = new StringEntity(json);
        // 6. set httpPost Entity
            httpPost.setEntity(se);
        // 7. Set some headers to inform server about the type of the content   
            httpPost.setHeader("Accept", "application/json");
            httpPost.setHeader("Content-type", "application/json");
            // 8. Execute POST request to the given URL
            HttpResponse httpResponse = httpclient.execute(httpPost);

一切都完美創建,好了,現在我想使用我在rest api中創建的方法,方法PUT覆蓋ID 5的用戶名,例如,如果要獲取,請輸入我的url + / ID並獲取特定用戶。 到“ PUT”,我這樣做但不起作用。

 @Override
    protected String doInBackground(String... params) {
        InputStream inputStream = null;
        String result = ""; 

        try {
            // 1. create HttpClient
            HttpClient httpclient = new DefaultHttpClient();
            // 2. make POST request to the given URL

            HttpPut httpPut = new    
            HttpPut("http://000.000.0.000:0000/xxxxxx/webresources/net.xxxxx.users/5");
            String json = "";
            //              // 3. build jsonObject
            //              JSONObject jsonObject2 = new JSONObject();
            //              jsonObject2.put("idGuarderias", idG);
            // 3. build jsonObject
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("name",newName);
            //      jsonObject.put("guarderiasIdGuarderias",jsonObject2);
            json = jsonObject.toString();
            StringEntity se = new StringEntity(json);
            // 6. set httpPost Entity
            httpPut.setEntity(se);
            // 7. Set some headers to inform server about the type of the content   
            httpPut.addHeader("Accept", "application/json");
            httpPut.addHeader("Content-type", "application/json");
            // 8. Execute POST request to the given URL
            HttpResponse httpResponse = httpclient.execute(httpPut);

        } catch (Exception e) {
            Log.d("InputStream", e.getLocalizedMessage());
        }

我應該做些什么改變?

也許您可以嘗試以下方法:

@Override
protected String doInBackground(String... params) {
    InputStream inputStream = null;
    String result = ""; 

    try {
        // 1. create HttpClient
        HttpClient httpclient = new DefaultHttpClient();
        // 2. make POST request to the given URL

        HttpPut httpPut = new    
        HttpPut("http://000.000.0.000:0000/xxxxxx/webresources/net.xxxxx.users/5");
        String json = "";
        //              // 3. build jsonObject
        //              JSONObject jsonObject2 = new JSONObject();
        //              jsonObject2.put("idGuarderias", idG);
        // 3. build jsonObject
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name",newName);
        //      jsonObject.put("guarderiasIdGuarderias",jsonObject2);
        json = jsonObject.toString();
        StringEntity se = new StringEntity(json);
        // 6. set httpPost Entity
        httpPut.setEntity(se);
        // 7. Set some headers to inform server about the type of the content   
        httpPut.addHeader("Accept", "application/json");
        httpPut.addHeader("Content-type", "application/json");
        // 8. Execute POST request to the given URL
        HttpResponse httpResponse = httpclient.execute(httpPut);


        //Try to add this
       inputStream = httpResponse.getEntity().getContent();

        if(inputStream != null)
            result = convertInputStreamToString(inputStream);
        else
            result = "Did not work!";

    } catch (Exception e) {
        //Log.d("InputStream", e.getLocalizedMessage());
    }
    return result;
}

嘗試以下代碼:您可以在jsonObject對象中添加參數

JSONObject jsonObject = new JSONObject();
jsonObject.put("name",newName);
try {
    HttpResponse response;
    HttpParams httpParameters = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParameters, TIMEOUT);
    HttpConnectionParams.setSoTimeout(httpParameters, TIMEOUT);
    HttpClient httpClient = new DefaultHttpClient(httpParameters);
    HttpPut putConnection = new HttpPut(url);
    putConnection.setHeader("json", jsonObject.toString());
    StringEntity se = new StringEntity(jsonObject.toString(), "UTF-8");
    se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
            "application/json"));
    putConnection.setEntity(se);
    try {
        response = httpClient.execute(putConnection);
        String JSONString = EntityUtils.toString(response.getEntity(),
                "UTF-8");
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
} catch (Exception e) {
    e.printStackTrace();
}

我用以下代碼解決了我的問題,感謝您的答復。

@Override
    protected String doInBackground(String... params) {
        InputStream inputStream = null;
        String result = ""; 

        try {
            // 1. create HttpClient
            HttpClient httpclient = new DefaultHttpClient();
            // 2. make POST request to the given URL
            HttpPut httpPUT = new    
                   HttpPut("http://xxx.xx.x.xxx:xxxx/xxxxxxxy/webresources/net.xxxxxx.users/3");
            String json = "";
            // 3. build jsonObject
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("idUser","3");
            jsonObject.put("name","Mark");
            jsonObject.put("pass","1234");
            jsonObject.put("rol","554");
            jsonObject.put("usuario","mark");




            // 4. convert JSONObject to JSON to String
            json = jsonObject.toString();

            // 5. set json to StringEntity
            StringEntity se = new StringEntity(json);
            // 6. set httpPost Entity
            httpPUT.setEntity(se);
            // 7. Set some headers to inform server about the type of the content   
            httpPUT.setHeader("Accept", "application/json");
            httpPUT.setHeader("Content-type", "application/json");
            // 8. Execute POST request to the given URL
            HttpResponse httpResponse = httpclient.execute(httpPUT);
            // 9. receive response as inputStream
            //                  inputStream = httpResponse.getEntity().getContent();
            //                  // 10. convert inputstream to string
            //                  if(inputStream != null)
            //                      result = convertInputStreamToString(inputStream);
            //                  else
            //                      result = "Did not work!";
        } catch (Exception e) {
            Log.d("InputStream", e.getLocalizedMessage());
        }

        return "EXITO!";
    }

他們應該將id放在網址中,並覆蓋包括id在內的所有參數

希望對您有所幫助:請注意, authToken是可選的

public JSONObject makePutRequest(String path, String params, String authToken) {

    try {
        //instantiates httpclient to make request
        @SuppressWarnings("deprecation")
        DefaultHttpClient httpclient = new DefaultHttpClient();

        //url with the post data
        @SuppressWarnings("deprecation")
        HttpPut httpost = new HttpPut(path);
        if (authToken != null) {
            httpost.setHeader("X-Auth-Token", authToken);
        }
        //passes the results to a string builder/entity
        @SuppressWarnings("deprecation")
        StringEntity se = new StringEntity(params.toString());

        //sets the post request as the resulting string
        httpost.setEntity(se);
        //sets a request header so the page receving the request
        //will know what to do with it
        httpost.setHeader("Accept", "application/json");
        httpost.setHeader("Content-type", "application/json");
        response = httpclient.execute(httpost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();

        if (is != null) {

            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();
        }
        jsonObject = new JSONObject(result);
        Log.i("Response", "" + jsonObject.toString());
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return jsonObject;

}

這是我的代碼。

在gradle中添加依賴項

編譯'com.squareup.okhttp:okhttp:2.6.0'

HttpUtils.class

public class HttpUtils {
    public static final MediaType JSON
            = MediaType.parse("application/json; charset=utf-8");
    public static OkHttpClient client = new OkHttpClient();

    /**
     * function for get url of webservice
     *
     * @param url
     * @return
     * @throws IOException
     */
    public static String getRun(String url) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .build();
        client.setConnectTimeout(90, TimeUnit.SECONDS);
        client.setReadTimeout(90, TimeUnit.SECONDS);
        client.setWriteTimeout(90, TimeUnit.SECONDS);
        Response response = client.newCall(request).execute();
        return response.body().string();
    }

    /**
     * function for post url of webservice
     *
     * @param type
     * @param formBody
     * @return
     * @throws IOException
     */

    public static String postRun(String type, RequestBody formBody) throws IOException {

        Response response = null;

        Request request = new Request.Builder()
                .url(type)
                .post(formBody)
                .build();
        client.setConnectTimeout(90, TimeUnit.SECONDS);
        client.setReadTimeout(90, TimeUnit.SECONDS);
        client.setWriteTimeout(90, TimeUnit.SECONDS);
        response = client.newCall(request).execute();
        return response.body().string();
    }

}

注冊類

    public class Registration extends AppCompatActivity {

    private String mStrSocialLoginResponse;
     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.registration); 
            new MyAsyncTask().execute();
        }

        public class MyAsyncTask extends AsyncTask<Void, Void, Void> {

                @Override
                protected void onPreExecute() {
                    super.onPreExecute();
                }

                @Override
                protected Void doInBackground(Void... params) {

                    try {
                        RequestBody formBody = new FormEncodingBuilder()
                                .add("user_id", "1")
                                .build();

                        mStrSocialLoginResponse = HttpUtils.postRun("your url", formBody);
                        if (mStrSocialLoginResponse != null) {
                            try {
                                JSONObject jsonObjectLogin = new JSONObject(mStrSocialLoginResponse);
                                if (jsonObjectLogin.has("code")) {
                                    mCode = jsonObjectLogin.getInt("code");
                                    if (mCode == 1) {
                                        if (jsonObjectLogin.has("image_path")) {
                                            strImagePath = jsonObjectLogin.getString("image_path");
                                        }
                                        if (jsonObjectLogin.has("data")) {
                                            JSONArray jsonArray = jsonObjectLogin.getJSONArray("data");
                                            for (int i = 0; i < jsonArray.length(); i++) {
                                                modelSongs = new ModelSongs();
                                                JSONObject jsonObj = jsonArray.getJSONObject(i);
                                                if (jsonObj.has("id")) {
                                                    strSongId = jsonObj.getString("id");
                                                    modelSongs.setId(strSongId);
                                                    Log.e(TAG, "SongId " + modelSongs.getId());
                                                }
                                                if (jsonObj.has("song")) {
                                                    strSongs = jsonObj.getString("song");
                                                    modelSongs.setSong(strAudioPath + strSongs);
                                                    Log.i("GetSOng", "++" + modelSongs.getSong());
                                                }
                                                if (jsonObj.has("image")) {
                                                    strImage = jsonObj.getString("image");
                                                    modelSongs.setImage(strImagePath + strImage);
                                                }

                                                }
                                               mArrayListSongs.add(modelSongs);
                                                }
                                            }
                                        }
                                    }
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }//if close

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return null;
                }

                @Override
                protected void onPostExecute(Void aVoid) {
                    super.onPostExecute(aVoid);
                }
            }
}

希望這個能對您有所幫助 :-)

該鏈接也將幫助解決從url解析問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM