我有一个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);
所有完美创建,现在我想使用我在其余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());
}
我应该做出哪些改变?
答案 0 :(得分: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;
}
答案 1 :(得分: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();
}
答案 2 :(得分: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!";
}
他们应该将id放在url中,并覆盖所有参数,包括id
答案 3 :(得分: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;
}
答案 4 :(得分:0)
这是我的代码。
在gradle中添加依赖
compile' 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