发送JSON由AsyncHttpClient POST请求到服务器 [英] Send JSON as a POST request to server by AsyncHttpClient
问题描述
我希望能够通过AsyncHttpClient发送JSON作为POST到我的本地服务器。我用这个方法:公共无效后(上下文的背景下,字符串URL,HttpEntity实体,字符串的contentType,AsyncHtt presponseHandler ResponseHandler所)
在我的code,但它不工作。这里是我的code:
私人无效loginUser()抛出JSONException,UnsupportedEncodingException {
字符串登录= textLogin.getText()的toString()。
。字符串密码= textPassword.getText()的toString(); 的JSONObject的JSONObject =新的JSONObject();
如果(Utility.isNotNull(登录)及和放大器; Utility.isNotNull(密码)){
jsonObject.put(用户名,登录);
jsonObject.put(密码,密码);
invokeWS(JSONObject的);
}
其他{
Toast.makeText(getApplicationContext(),Proszęwypełnićwszystkie波拉!,Toast.LENGTH_LONG).show();
}
}私人无效invokeWS(JSONObject的JSONObject的)抛出UnsupportedEncodingException {
StringEntity实体=新StringEntity(jsonObject.toString());
AsyncHttpClient客户端=新AsyncHttpClient(); Log.i(SER,HTTP://+ Constants.address +:+ Constants.port +/ silownia_java / REST /登录/ AUTH+实体);
Log.i(SER,HTTP://+ Constants.address +:+ Constants.port +/ silownia_java / REST /登录/ AUTH+ JSONObject的); client.post(getApplicationContext(),HTTP://+ Constants.address +:+ Constants.port +/ silownia_java / REST /登录/身份验证,实体,应用/ JSON,新JsonHtt presponseHandler(){
@覆盖
公共无效的onSuccess(INT状态code,头[]头,OBJ的JSONObject){
尝试{
Log.i(SER,在这里!);
字符串登录= obj.getString(登录);
INT ID = obj.getInt(ID); //user.setUserId(obj.getInt(\"userid));
}赶上(JSONException E){
// TODO自动生成catch块
Toast.makeText(getApplicationContext(),出现错误[服务器的JSON响应可能无效]!,Toast.LENGTH_LONG).show();
e.printStackTrace();
}
} @覆盖
公共无效onFailure处(INT状态code,头[]头,抛出的Throwable,JSONObject的errorResponse){
如果(状态code == 404){
Toast.makeText(getApplicationContext(),404 - 聂odnaleziono serwera!,Toast.LENGTH_LONG).show();
}否则如果(状态code == 500){
Toast.makeText(getApplicationContext(),500 - COSposzło聂德宝希隆斯克斯拖serwera!,Toast.LENGTH_LONG).show();
}否则如果(状态code == 403){
Toast.makeText(getApplicationContext(),Podano niepoprawne丹麦人!,Toast.LENGTH_LONG).show();
}其他{
Toast.makeText(getApplicationContext(),throwable.toString(),Toast.LENGTH_LONG).show();
}
}
});
}
我的日志
看起来不错:
HTTP:// MY_IP_ADDRESS:8080 / silownia_java / REST /登录/ AUTH {用户名:barni,密码:12345}
但我得到这样的错误:
org.apache.http.client.Htt presponseException:不支持的媒体类型
Additionaly,我知道,服务器不会得到任何请求。那么,是什么原因可能是?
我解决了这个问题,通过添加标题信息到我的实体
对象。
ByteArrayEntity实体=新ByteArrayEntity(jsonObject.toString()的getBytes(UTF-8));
entity.setContentType(新BasicHeader(HTTP.CONTENT_TYPE,应用/ JSON));
I want to be able to send JSON as a POST to my localhost server by AsyncHttpClient. I'm using this method:
public void post(Context context, String url, HttpEntity entity, String contentType, AsyncHttpResponseHandler responseHandler)
in my code but it doesn't work. Here is my code:
private void loginUser() throws JSONException, UnsupportedEncodingException {
String login = textLogin.getText().toString();
String password = textPassword.getText().toString();
JSONObject jsonObject = new JSONObject();
if(Utility.isNotNull(login) && Utility.isNotNull(password)) {
jsonObject.put("username", login);
jsonObject.put("password", password);
invokeWS(jsonObject);
}
else{
Toast.makeText(getApplicationContext(), "Proszę wypełnić wszystkie pola!", Toast.LENGTH_LONG).show();
}
}
private void invokeWS(JSONObject jsonObject) throws UnsupportedEncodingException {
StringEntity entity = new StringEntity(jsonObject.toString());
AsyncHttpClient client = new AsyncHttpClient();
Log.i("SER", "http://" + Constants.address + ":" + Constants.port + "/silownia_java/rest/login/auth" + entity);
Log.i("SER", "http://" + Constants.address + ":" + Constants.port + "/silownia_java/rest/login/auth" + jsonObject);
client.post(getApplicationContext(), "http://" + Constants.address + ":" + Constants.port + "/silownia_java/rest/login/auth", entity, "application/json", new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject obj) {
try {
Log.i("SER", "HERE!");
String login = obj.getString("login");
int ID = obj.getInt("id");
//user.setUserId(obj.getInt("userid"));
} catch (JSONException e) {
// TODO Auto-generated catch block
Toast.makeText(getApplicationContext(), "Error Occured [Server's JSON response might be invalid]!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
if (statusCode == 404) {
Toast.makeText(getApplicationContext(), "404 - Nie odnaleziono serwera!", Toast.LENGTH_LONG).show();
} else if (statusCode == 500) {
Toast.makeText(getApplicationContext(), "500 - Coś poszło nie tak po stronie serwera!", Toast.LENGTH_LONG).show();
} else if (statusCode == 403) {
Toast.makeText(getApplicationContext(), "Podano niepoprawne dane!", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), throwable.toString(), Toast.LENGTH_LONG).show();
}
}
});
}
My Logs
looks ok:
http://MY_IP_ADDRESS:8080/silownia_java/rest/login/authorg.apache.http.entity.StringEntity@384d6a6d
http://MY_IP_ADDRESS:8080/silownia_java/rest/login/auth{"username":"barni","password":"12345"}
But i get such error:
org.apache.http.client.HttpResponseException: Unsupported Media Type
Additionaly, I know that server doesn't get any request. So, what the cause could be?
I solved it, by adding header information to my entity
object.
ByteArrayEntity entity = new ByteArrayEntity(jsonObject.toString().getBytes("UTF-8"));
entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
这篇关于发送JSON由AsyncHttpClient POST请求到服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!