我需要在Android应用程序中以UTF-8字符编码显示文本,这是我的JSONAsyncTask代码:
class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {
ProgressDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(getActivity());
dialog.setMessage("Wait...");
dialog.setTitle("Loading");
dialog.show();
dialog.setCancelable(false);
}
@Override
protected Boolean doInBackground(String... urls) {
try {
HttpGet httppost = new HttpGet(urls[0]);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httppost);
int status = response.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
JSONObject jsono = new JSONObject(data);
JSONArray jarray = jsono.getJSONArray("news");
for (int i = 0; i < jarray.length(); i++) {
JSONObject object = jarray.getJSONObject(i);
News news = new News();
news.setTitle(object.getString("title"));
news.setDescription(object.getString("description"));
news.setDate(object.getString("date"));
news.setImage(object.getString("image"));
newsList.add(news);
}
return true;
}
} catch (ParseException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
当然,在我要求之前,研究并看到这些结果:
还有更多......但这些答案无法解决我的问题。
答案 0 :(得分:0)
最后我解决了我的问题。
最终代码:
@Override
protected Boolean doInBackground(String... urls) {
try {
HttpGet httppost = new HttpGet(urls[0]);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httppost);
int status = response.getStatusLine().getStatusCode();
将状态更改为:
if (status == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
将此代码编辑为:
String data = EntityUtils.toString(response.getEntity(), cz.msebera.android.httpclient.protocol.HTTP.UTF_8);
JSONObject jsono = new JSONObject(data);
JSONArray jarray = jsono.getJSONArray("news");
for (int i = 0; i < jarray.length(); i++) {
JSONObject object = jarray.getJSONObject(i);
News news = new News();
news.setTitle(object.getString("title"));
news.setDescription(object.getString("description"));
news.setDate(object.getString("date"));
news.setImage(object.getString("image"));
newsList.add(news);
}
return true;
}
} catch (ParseException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
答案 1 :(得分:0)
String URL = your_URL;
URL obj = new URL(URL);
HttpURLConnection connection = (HttpURLConnection) obj.openConnection();
connection.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new
InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
答案 2 :(得分:-1)
您可以使用 URLEncoder,URLDecoder 对 Jsonobject 进行编码,解码。下面给出了这个例子
1.编码 Jsonobject
try
{
String encoded = URLEncoder.encode(jsonobject, "UTF-8");
Log.e("UTF 8",encoded );
}
catch (UnsupportedEncodingException e)
{
Log.e("utf8", "conversion", e);
}
2.解码 Jsonobject
try
{
String decoded = URLDecoder.decode(jsonobject, "UTF-8");
Log.e("UTF 8",decoded );
}
catch (UnsupportedEncodingException e)
{
Log.e("utf8", "conversion", e);
}