Приведенный ниже код принимает json с сервера и выводит его в текстовое окно, если на сервере пишу возвращаемое содержимое русскими буквами, то в ответ приходят иероглифы, подскажите пожалуйста, в каком месте и как правильно мне указать кодировку для распознавания символов? В этом приложении происходит авторизация, после успешной авторизации получаю в ответ слово "Привет", но выводится ?????, как сделать так, чтобы вместо ????? у меня выводилось на экран слово привет? вот код MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//тут указываем куда будем конектится
new RequestTask().execute("myurl.com/login1.php");
}
});
}
class RequestTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
EditText login = (EditText) findViewById(R.id.editText1);
// EditText pass = (EditText) findViewById(R.id.editText2);
try {
//создаем запрос на сервер
DefaultHttpClient hc = new DefaultHttpClient();
ResponseHandler<String> res = new BasicResponseHandler();
//он у нас будет посылать post запрос
HttpPost postMethod = new HttpPost(params[0]);
//будем передавать два параметра
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
//передаем параметры из наших текстбоксов
//логин
nameValuePairs.add(new BasicNameValuePair("login", login.getText().toString()));
//пароль
// nameValuePairs.add(new BasicNameValuePair("pass", pass.getText().toString()));
//собераем их вместе и посылаем на сервер
postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//получаем ответ от сервера
String response = hc.execute(postMethod, res);
//посылаем на вторую активность полученные параметры
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
//то что куда мы будем передавать и что, putExtra(куда, что);
intent.putExtra(SecondActivity.JsonURL, response);
startActivity(intent);
} catch (Exception e) {
System.out.println("Exp=" + e);
}
return null;
}
@Override
protected void onPostExecute(String result) {
ProgressDialog dialog = new ProgressDialog(MainActivity.this);
dialog.dismiss();
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
ProgressDialog dialog = new ProgressDialog(MainActivity.this);
dialog.setMessage("Загружаюсь...");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.show();
super.onPreExecute();
}
}
}
Во второй активити он выводит текст который лежит на сервере
public class SecondActivity extends Activity {
public static String JsonURL;
private static ArrayList<HashMap<String, Object>> myBooks;
private static final String FIRST = "firstname";
public ListView listView;
/** @param result */
public void JSONURL(String result) {
try {
//создали читателя json объектов и отдали ему строку - result
JSONObject json = new JSONObject(result);
//дальше находим вход в наш json им является ключевое слово data
JSONArray urls = json.getJSONArray("data");
//проходим циклом по всем нашим параметрам
for (int i = 0; i < urls.length(); i++) {
HashMap<String, Object> hm;
hm = new HashMap<String, Object>();
//читаем что в себе хранит параметр firstname
hm.put(FIRST, urls.getJSONObject(i).getString("firstName").toString());
myBooks.add(hm);
//дальше добавляем полученные параметры в наш адаптер
SimpleAdapter adapter = new SimpleAdapter(SecondActivity.this, myBooks, R.layout.list,
new String[] { FIRST, }, new int[] { R.id.text1});
//выводим в листвбю
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.url);
listView = (ListView) findViewById(R.id.list);
myBooks = new ArrayList<HashMap<String, Object>>();
//принимаем параметр который мы послылали в manActivity
Bundle extras = getIntent().getExtras();
//превращаем в тип стринг для парсинга
String json = extras.getString(JsonURL);
//передаем в метод парсинга
JSONURL(json);
}
}
Кодировка нужна чтобы преобразовать массив байтов в строку. Так что она нужна на уровень выше (в месте где ты принимаешь json от сервера). Строчка подаваемая на твой метод уже должна содержать валидные русские буквы в правильной кодировке.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как от сюда вытащить первые 5 имён? Остальные не нужны
нашлась довольно интересная задача, пишу расширение для google chrome и столкнулся с проблемой, когда мне требуется из спарсеного <script type="text/javascript">...