在android中将json对象发送到HTTP服务器时导致错误请求异常
我正在尝试发送此HTTP服务器,但出现异常。这是我在asynctask中使用的代码,我觉得我错过了一些东西,这就是为什么它会出现异常,因为当我尝试我的请求时,我在fiddler中获得了成功。如果有人能发现这个错误,请帮助我。我们将非常感谢您的帮助 这是我的请求,在android中将json对象发送到HTTP服务器时导致错误请求异常,android,json,android-asynctask,Android,Json,Android Asynctask,我正在尝试发送此HTTP服务器,但出现异常。这是我在asynctask中使用的代码,我觉得我错过了一些东西,这就是为什么它会出现异常,因为当我尝试我的请求时,我在fiddler中获得了成功。如果有人能发现这个错误,请帮助我。我们将非常感谢您的帮助 这是我的请求, {"CartItemEntity":[{"MainMenuCode":"CHBA","SubMenuCode":"AL","Quantity":1,"Price":1560}],"DiscountCode":"0","PayCode":
{"CartItemEntity":[{"MainMenuCode":"CHBA","SubMenuCode":"AL","Quantity":1,"Price":1560}],"DiscountCode":"0","PayCode":"0","OrderID":"6592","OutletCode":"AT","RequiredDate":"15/6/2015","Total":"1638.0","CardNo":"0","PhoneNo":1234}
这是asynctask类
public class GetAllDiscountsAsyncTask extends
AsyncTask<JSONObject, Integer, JSONArray> {
private OnTaskCompleted listener;
private JSONArray responseJson = null;
private Context contxt;
public GetAllDiscountsAsyncTask(Context context, OnTaskCompleted listener) {
// API = apiURL;
this.contxt = context;
this.listener = listener;
}
JSONObject jData;
@Override
protected JSONArray doInBackground(JSONObject... jData) {
String parameterPass = jData.toString();
Log.i("doInBackground", parameterPass);
String path = null;
String response = null;
DefaultHttpClient httpClient = null;
ResponseHandler<String> responseHandler = null;
try {
path = "xxxxxxxxxxxxxxxxxxxxxxx";
new URL(path);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
httpClient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(path);
httppost.setEntity(new StringEntity(jData.toString(), "UTF-8"));
httppost.setHeader("Content-type", "application/json");
responseHandler = new BasicResponseHandler();
response = httpClient.execute(httppost, responseHandler);
responseJson = new JSONArray(response);
System.out.println("*****JARRAY*****" + responseJson.length());
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
try {
responseJson = new JSONArray(response);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
return responseJson;
}
@Override
protected void onPostExecute(JSONArray result) {
super.onPostExecute(result);
listener.onTaskCompleted(responseJson);
}
}
公共类GetAllDiscountsAsyncTask扩展
异步任务{
私有OnTaskCompleted侦听器;
私有JSONArray responseJson=null;
私人语境;
公共GetAllDiscountsAsyncTask(上下文,OnTaskCompleted侦听器){
//API=apirl;
this.contxt=上下文;
this.listener=listener;
}
JSONObject jData;
@凌驾
受保护的JSONArray doInBackground(JSONObject…jData){
字符串参数pass=jData.toString();
Log.i(“doInBackground”,参数传递);
字符串路径=null;
字符串响应=null;
DefaultHttpClient httpClient=null;
ResponseHandler ResponseHandler=null;
试一试{
path=“xxxxxxxxxxxxxxxx”;
新URL(路径);
}捕获(格式错误){
e、 printStackTrace();
}
试一试{
httpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(路径);
httppost.setEntity(新的StringEntity(jData.toString(),“UTF-8”);
setHeader(“内容类型”、“应用程序/json”);
responseHandler=新的BasicResponseHandler();
response=httpClient.execute(httppost,responseHandler);
responseJson=新的JSONArray(响应);
System.out.println(“****JARRAY*****”+responseJson.length());
}捕获(例外e){
Log.e(“缓冲区错误”,“错误转换结果”+e.toString());
}
试一试{
responseJson=新的JSONArray(响应);
}捕获(JSONException e){
Log.e(“JSON解析器”,“错误解析数据”+e.toString());
}
返回响应;
}
@凌驾
受保护的void onPostExecute(JSONArray结果){
super.onPostExecute(结果);
onTaskCompleted(responseJson);
}
}
这是我得到的一个例外
您必须将响应转换为字符串,然后从中生成JSON对象您确定它是JSONArray而不是JSONObject吗?@Sachin Gadagi我已通过添加请求更新了我的问题,这是一个json对象,对吗?我想你应该看到fiddler发出请求时发送的确切请求,看看java端的一切是否都是一样的。这是一样的,我从java代码的系统中获取数据放入fiddler,我得到的是加法[]括号。([在开头和]在结尾),如何删除该行中response的方括号值为null,response=httpClient.execute(httppost,responseHandler);