不支持的字符集异常:utf-lixo
UnsupportedCharsetException: utf-lixo
当我尝试在我的应用程序中运行 Activity 时,我在 Logcat 上收到此错误。
1134-1134/br.com.agenciaeisberg.qm E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: br.com.agenciaeisberg.qm, PID: 1134
java.nio.charset.UnsupportedCharsetException: utf-lixo
我已经调试了代码并且一切正常,直到我调用网络服务
JSONObject json = jsonParser.makeHttpRequest(url_info_hospital,"GET",params);
PHP 页面正在运行,所需的所有信息都正常。
我检查了 PHP 和 APP 代码,但没有找到 UTF-lixo
在所有应用布局上都在使用
<?xml version="1.0" encoding="UTF-8"?>
并且 PHP 没有声明任何内容。
以下是活动的完整代码
package br.com.agenciaeisberg.qm;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class HospitalActivity extends Activity {
TextView Nome;
String pid;
Button btnIndicarLotacao;
// Progress Dialog
private ProgressDialog pDialog;
// JSON parser class
JSONParser jsonParser = new JSONParser();
// URL de busca de informações hospital
private static final String url_info_hospital = "http://www.quickmed.com.br/android_hospital.php";
// JSON Nodes names
private static final String TAG_HOSPITAL = "hospital";
private static final String TAG_PID = "pid";
private static final String TAG_NOME = "nome";
private static final String TAG_SUCESSO = "sucesso";
private static final String TAG_LOTACAO = "lotacao";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.hospital);
//Botão de Indicar Lotação
btnIndicarLotacao = (Button)findViewById(R.id.btnIndicarLotacao);
//Buscando detalhes do hospital através do Intent
Intent i = getIntent();
// Buscando o pid do intent
pid = i.getStringExtra(TAG_PID);
// Buscando info do hospital no background
new InfoHospital().execute();
// Botão Indicar Lotação
btnIndicarLotacao .setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
//Launch atividade Lista de Hospitais
Intent i=new Intent(getApplicationContext(),ListagemHospitaisActivity.class);
startActivity(i);
}
});
}
/**
* Background Async Task para buscar todos as informações do hospital
*/
class InfoHospital extends AsyncTask<String, String, String>{
/**
* Mostra Progress Dialog
*/
@Override
protected void onPreExecute(){
super.onPreExecute();
pDialog = new ProgressDialog(HospitalActivity.this);
pDialog.setMessage("Carregando informações dos hospitais. Favor aguadar ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Buscando as informações num Background thread
*/
protected String doInBackground(String... params){
//atualizando UI pelo Background thread
runOnUiThread(new Runnable() {
@Override
public void run() {
// Check for sucesso tag
int sucesso;
try {
//Construindo Parametros
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("pid",pid));
//buscando as informações do produto atrav~es de Request HTTP
// Observer que o url de buscar produtos vai utilizar GET
JSONObject json = jsonParser.makeHttpRequest(
url_info_hospital,"GET",params);
// Verifica o log para a json response
Log.d("Info Hospital", json.toString());
// json tag sucesso
//sucesso = json.getInt(TAG_SUCESSO);
sucesso = 1;
if (sucesso == 1){
// Recebeu informações do Hospital
JSONArray hospitalObj = json
.getJSONArray(TAG_HOSPITAL);
JSONObject hospital = hospitalObj.getJSONObject(0);
//produto encontrado
// TextView
Nome = (TextView) findViewById(R.id.displayNome);
Nome.setText(hospital.getString(TAG_NOME));
}else{
// hospital não encontrado
}
}catch (JSONException e) {
e.printStackTrace();
}
}
});
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once got all details
pDialog.dismiss();
}
}
}
这是一个愚蠢的错误。但我会把它留在这里,这样它可能会帮助其他人犯同样的愚蠢错误。在 JSONParser
class 上,它定义了 URLEncodedUtils
。错误在那里。
下面块的第 4 行不是 UTF-8,而是 utf-lixo
}else if(method == "GET"){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "UTF-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
当我尝试在我的应用程序中运行 Activity 时,我在 Logcat 上收到此错误。
1134-1134/br.com.agenciaeisberg.qm E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: br.com.agenciaeisberg.qm, PID: 1134
java.nio.charset.UnsupportedCharsetException: utf-lixo
我已经调试了代码并且一切正常,直到我调用网络服务
JSONObject json = jsonParser.makeHttpRequest(url_info_hospital,"GET",params);
PHP 页面正在运行,所需的所有信息都正常。
我检查了 PHP 和 APP 代码,但没有找到 UTF-lixo
在所有应用布局上都在使用
<?xml version="1.0" encoding="UTF-8"?>
并且 PHP 没有声明任何内容。
以下是活动的完整代码
package br.com.agenciaeisberg.qm;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class HospitalActivity extends Activity {
TextView Nome;
String pid;
Button btnIndicarLotacao;
// Progress Dialog
private ProgressDialog pDialog;
// JSON parser class
JSONParser jsonParser = new JSONParser();
// URL de busca de informações hospital
private static final String url_info_hospital = "http://www.quickmed.com.br/android_hospital.php";
// JSON Nodes names
private static final String TAG_HOSPITAL = "hospital";
private static final String TAG_PID = "pid";
private static final String TAG_NOME = "nome";
private static final String TAG_SUCESSO = "sucesso";
private static final String TAG_LOTACAO = "lotacao";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.hospital);
//Botão de Indicar Lotação
btnIndicarLotacao = (Button)findViewById(R.id.btnIndicarLotacao);
//Buscando detalhes do hospital através do Intent
Intent i = getIntent();
// Buscando o pid do intent
pid = i.getStringExtra(TAG_PID);
// Buscando info do hospital no background
new InfoHospital().execute();
// Botão Indicar Lotação
btnIndicarLotacao .setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
//Launch atividade Lista de Hospitais
Intent i=new Intent(getApplicationContext(),ListagemHospitaisActivity.class);
startActivity(i);
}
});
}
/**
* Background Async Task para buscar todos as informações do hospital
*/
class InfoHospital extends AsyncTask<String, String, String>{
/**
* Mostra Progress Dialog
*/
@Override
protected void onPreExecute(){
super.onPreExecute();
pDialog = new ProgressDialog(HospitalActivity.this);
pDialog.setMessage("Carregando informações dos hospitais. Favor aguadar ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Buscando as informações num Background thread
*/
protected String doInBackground(String... params){
//atualizando UI pelo Background thread
runOnUiThread(new Runnable() {
@Override
public void run() {
// Check for sucesso tag
int sucesso;
try {
//Construindo Parametros
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("pid",pid));
//buscando as informações do produto atrav~es de Request HTTP
// Observer que o url de buscar produtos vai utilizar GET
JSONObject json = jsonParser.makeHttpRequest(
url_info_hospital,"GET",params);
// Verifica o log para a json response
Log.d("Info Hospital", json.toString());
// json tag sucesso
//sucesso = json.getInt(TAG_SUCESSO);
sucesso = 1;
if (sucesso == 1){
// Recebeu informações do Hospital
JSONArray hospitalObj = json
.getJSONArray(TAG_HOSPITAL);
JSONObject hospital = hospitalObj.getJSONObject(0);
//produto encontrado
// TextView
Nome = (TextView) findViewById(R.id.displayNome);
Nome.setText(hospital.getString(TAG_NOME));
}else{
// hospital não encontrado
}
}catch (JSONException e) {
e.printStackTrace();
}
}
});
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once got all details
pDialog.dismiss();
}
}
}
这是一个愚蠢的错误。但我会把它留在这里,这样它可能会帮助其他人犯同样的愚蠢错误。在 JSONParser
class 上,它定义了 URLEncodedUtils
。错误在那里。
下面块的第 4 行不是 UTF-8,而是 utf-lixo
}else if(method == "GET"){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "UTF-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}