Android org.json.JSONException:字符1526处的未终止对象
我有以下问题,我被困在它从一段时间,不知道是什么问题 我发现了错误 org.json.JSONException:字符1526处的未终止对象,如下响应字符串的打印 按照我的方法Android org.json.JSONException:字符1526处的未终止对象,android,json,Android,Json,我有以下问题,我被困在它从一段时间,不知道是什么问题 我发现了错误 org.json.JSONException:字符1526处的未终止对象,如下响应字符串的打印 按照我的方法 public void getItemType(final Context context,final ItemTypeRequestUIListener uiListener) { if (PhoneUtils.isNetworkAvailable(context) == true) {
public void getItemType(final Context context,final ItemTypeRequestUIListener uiListener) {
if (PhoneUtils.isNetworkAvailable(context) == true) {
new AsyncTask<Void, Void, Void>() {
protected Void doInBackground(Void... params) {
try {
DefaultHttpClient client = new DefaultHttpClient();
HttpPost request = new HttpPost(AppConstants.URL_DO_LIST_LOOKUP);
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
request.setEntity(new StringEntity(AppConstants.URL_DO_LIST_LOOKUP_ITEM_JSON_PARAM_FORMAT));
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
if (entity.getContentLength() != 0) {
Reader objectReader = new InputStreamReader(response.getEntity().getContent());
char[] buffer = new char[(int) response.getEntity().getContentLength()];
objectReader.read(buffer);
objectReader.close();
String str = new String(buffer);
str = str.replace("?", "");
Log.i("AMIRA", "TYPES RESPONSE : " + str);
JSONObject jsonResponse = new JSONObject(str);
uiListener.onRequestCompleted(ItemTypeResponse.parseJSONObject(jsonResponse),null);
}
} catch (Exception e) {
e.printStackTrace();
uiListener.onRequestCompleted(null,AppError.GENERAL_ERROR);
}
return null;
};
}.execute();
} else {
uiListener.onRequestCompleted(null, AppError.NO_INTERNET);
}
}
public void getItemType(最终上下文,最终ItemTypeRequestUIListener uiListener){
if(PhoneUtils.isNetworkAvailable(context)==true){
新建异步任务(){
受保护的Void doInBackground(Void…参数){
试一试{
DefaultHttpClient=新的DefaultHttpClient();
HttpPost请求=新建HttpPost(AppConstants.URL\u DO\u LIST\u LOOKUP);
setHeader(“接受”、“应用程序/json”);
setHeader(“内容类型”、“应用程序/json”);
setEntity(新的StringEntity(AppConstants.URL\u DO\u LIST\u LOOKUP\u ITEM\u JSON\u PARAM\u格式));
HttpResponse response=client.execute(请求);
HttpEntity=response.getEntity();
if(entity.getContentLength()!=0){
Reader objectReader=new InputStreamReader(response.getEntity().getContent());
char[]buffer=new char[(int)response.getEntity().getContentLength()];
读取(缓冲区);
objectReader.close();
String str=新字符串(缓冲区);
str=str.replace(“?”,”);
Log.i(“阿米拉”,“类型响应:”+str);
JSONObject jsonResponse=新的JSONObject(str);
uiListener.onRequestCompleted(ItemTypeResponse.parseJSONObject(jsonResponse),null);
}
}捕获(例外e){
e、 printStackTrace();
uiListener.onRequestCompleted(null,AppError.GENERAL\u错误);
}
返回null;
};
}.execute();
}否则{
uiListener.onRequestCompleted(null,AppError.NO_INTERNET);
}
}
有谁能告诉我这里有什么问题吗?最可能的问题是您使用了错误的字符编码来读取流 一行代码如下:
Reader objectReader=newInputStreamReader(response.getEntity().getContent())代码>
始终是危险的,因为您没有明确指定要使用的字符集
您可以尝试以下方法:
Reader objectReader=newInputStreamReader(response.getEntity().getContent(),“UTF-8”)代码>
如果您知道服务器正在发送UTF-8内容
处理此问题的最佳方法是读取响应中的内容类型
标题,该标题可能类似于:
内容类型:application/json;字符集=UTF-8
分析“charset=”之后的字符串,并将其作为字符集名称传递
实际上,您正在指定服务器所说的正在使用的字符集
但要小心:charset参数是可选的,可能不存在
作为一种极端的回退,您可以捕获JSONException
,然后使用不同的编码重试解析。您必须将响应缓冲到某个位置,以便重新读取。最可能的问题是您使用了错误的字符编码来读取流
一行代码如下:
Reader objectReader=newInputStreamReader(response.getEntity().getContent())代码>
始终是危险的,因为您没有明确指定要使用的字符集
您可以尝试以下方法:
Reader objectReader=newInputStreamReader(response.getEntity().getContent(),“UTF-8”)代码>
如果您知道服务器正在发送UTF-8内容
处理此问题的最佳方法是读取响应中的内容类型
标题,该标题可能类似于:
内容类型:application/json;字符集=UTF-8
分析“charset=”之后的字符串,并将其作为字符集名称传递
实际上,您正在指定服务器所说的正在使用的字符集
但要小心:charset参数是可选的,可能不存在
作为一种极端的回退,您可以捕获JSONException
,然后使用不同的编码重试解析。您必须将响应缓冲到某个位置,以便重新读取。这些阿拉伯字符可能是?@EdwardvanRaak那么我应该怎么做才能解决此问题?尝试查找有关将这些字符编码/解码为Unicode的信息,这些阿拉伯字符可能是?@EdwardvanRaak那么我应该怎么做才能解决此问题?尝试查找关于将这些字符编码/解码到unicodeI的一些内容我已经尝试过了,但仍然不起作用,有时有效,有时通过异常。我已经尝试过,但仍然不起作用,有时有效,有时通过异常。