2014-09-11 1 views
1

У меня есть приложение для Android, которое консультируется и вставляет веб-сервис в режим ожидания. все это через apache HTTPClient и JSON.Отправить запрос «PUT» в Android для отдыха api

так, например, я ввожу нового пользователя в 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); 

все отлично создан, а теперь я хочу использовать метод, который я создал в апи отдыха, метод 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()); 
     } 

Какие изменения следует внести?

+0

Есть ли какая-то ошибка? –

+0

Нет, просто ничего не вводите в bd ... –

+0

Не исключение тоже? странно, это правильный URL? –

ответ

1

Я решил свою проблему с помощью следующего кода, спасибо за ответ ,

@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!"; 
    } 

Они должны поместить идентификатор в URL, а также перезаписывать все параметры, включая идентификатор

1

Попробуйте этот код: Вы можете добавить свой параметр в объекте 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(); 
} 
+0

спасибо, но где я пишу, например, это - («name», newName); –

+0

в putConenction.setHeader ("name", newName); ???? –

+0

@egh вы хотите добавить что? Basic auth? Или добавить параметр JSON? –

2

Может быть, вы можете попробовать это:

@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; 
} 
+0

спасибо, но это не перезаписывает значение «имя» пользователя с идентификатором 5 в моем bd. –

0

Надеется, что это помогает кто-то: Примечания здесь 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; 

} 
0

Вот мой код.

добавить зависимость в 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(); 
    } 

} 

Registration.class

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); 
       } 
      } 
} 

Надеюсь, что это поможет вам :-)

ссылку также поможет решить проблему json parsing from url