Почему я получаю пустой список на моем телефоне. Может ли 1 помочь? Это показывает правильные 7 позиций, но они пусты.
Есть мой PHP-файл, вероятно, хорошо. Я использую JSON кодировать.
public class ClientActivity extends UserAreaActivity {
private String jsonResult;
private String url = "http://vinusek.000webhostapp.com/Client2.php";
private ListView listView;
private TextView nazwa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client);
listView = (ListView) findViewById(R.id.listView1);
nazwa = (TextView) findViewById(R.id.textView2) ;
accessWebService();
}
// Async Task to access the web
private class JsonReadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(params[0]);
try {
HttpResponse response = httpclient.execute(httppost);
jsonResult = inputStreamToString(
response.getEntity().getContent()).toString();
}
catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private StringBuilder inputStreamToString(InputStream is) {
String rLine = "";
StringBuilder answer = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
try {
while ((rLine = rd.readLine()) != null) {
answer.append(rLine);
}
}
catch (IOException e) {
// e.printStackTrace();
Toast.makeText(getApplicationContext(),
"Error..." + e.toString(), Toast.LENGTH_LONG).show();
}
return answer;
}
@Override
protected void onPostExecute(String result) {
ListDrwaer();
}
}// end async task
public void accessWebService() {
JsonReadTask task = new JsonReadTask();
// passes values for the urls string array
task.execute(new String[] { url });
}
// build hash set for list view
public void ListDrwaer() {
List<Map<String, String>> employeeList = new ArrayList<Map<String, String>>();
try {
JSONObject jsonResponse = new JSONObject(jsonResult);
JSONArray jsonMainNode = jsonResponse.optJSONArray("result");
for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
String number = jsonChildNode.getString("id");
String name = jsonChildNode.getString("login");
String pass = jsonChildNode.getString("haslo");
String outPut = number + "-" + name + "-" + pass;
employeeList.add(createEmployee("list", outPut));
nazwa.setText(outPut);
}} catch (JSONException e) {
Toast.makeText(getApplicationContext(), "Error" + e.toString(),
Toast.LENGTH_SHORT).show();
}SimpleAdapter simpleAdapter = new SimpleAdapter(ClientActivity.this, employeeList,
android.R.layout.simple_list_item_1,
new String[] {"list"}, new int[] { android.R.id.text1 });
listView.setAdapter(simpleAdapter);
}
private HashMap<String, String> createEmployee(String name, String number) {
HashMap<String, String> employeeNameNo = new HashMap<String, String>();
employeeNameNo.put(number, name);
return employeeNameNo;
}}
Что здесь не так, я получил код отсюда http://codeoncloud.blogspot.in/2013/07/android-mysql-php-json-tutorial.html
и это работает для его файла php.
Проверить SimpleAdapter
ссылка на класс:
Как видите, конструктор принимает следующие аргументы:
SimpleAdapter (Context context,
List<? extends Map<String, ?>> data,
int resource,
String[] from,
int[] to)
- context Context: контекст, в котором выполняется представление, связанное с этим SimpleAdapter
- Список данных: Список карт. Каждая запись в списке соответствует одной строке в списке. Карты содержат данные для каждой строки и должны включать все записи, указанные в «от»
- resource int: идентификатор ресурса макета представления, который определяет представления для этого элемента списка. Файл макета должен содержать хотя бы те именованные представления, которые определены в «to»
- from String: список имен столбцов, которые будут добавлены на карту, связанную с каждым элементом.
- to int: Представления, которые должны отображать столбец в параметре «from». Все они должны быть TextViews. Первые N представлений в этом списке получают значения первых N столбцов в параметре from.
Вы создаете SimpleAdapter
с :
SimpleAdapter simpleAdapter = new SimpleAdapter(ClientActivity.this, employeeList,
android.R.layout.simple_list_item_1,
new String[] {"list"}, new int[] { android.R.id.text1 });
Это означает, что каждый элемент вашего employeeList
List
должен быть Map
который содержит ключ «список».
Следовательно
employeeList.add(createEmployee("list", outPut));
следует добавить к List
Map
имеющий запись с ключом «список» и значением outPut
,
Тем не менее, ваш createEmployee()
метод создает HashMap
с одной записью, где ключ и значение меняются местами.
Вы должны изменить
private HashMap<String, String> createEmployee(String name, String number) {
HashMap<String, String> employeeNameNo = new HashMap<String, String>();
employeeNameNo.put(number, name);
return employeeNameNo;
}
в
private HashMap<String, String> createEmployee(String name, String number) {
HashMap<String, String> employeeNameNo = new HashMap<String, String>();
employeeNameNo.put(name, number);
return employeeNameNo;
}
Других решений пока нет …