Android 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) {

我有以下问题,我被困在它从一段时间,不知道是什么问题

我发现了错误

org.json.JSONException:字符1526处的未终止对象,如下响应字符串的打印

按照我的方法

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的一些内容我已经尝试过了,但仍然不起作用,有时有效,有时通过异常。我已经尝试过,但仍然不起作用,有时有效,有时通过异常。