Пустой список Android Studio

Почему я получаю пустой список на моем телефоне. Может ли 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.

1 ответ

Решение

Проверить SimpleAdapter ссылка на класс:

Как видите, конструктор принимает следующие аргументы:

SimpleAdapter (Context context, 
               List<? extends Map<String, ?>> data, 
               int resource, 
               String[] from, 
               int[] to)
  1. context Context: контекст, в котором выполняется представление, связанное с этим SimpleAdapter
  2. Список данных: Список карт. Каждая запись в списке соответствует одной строке в списке. Карты содержат данные для каждой строки и должны включать все записи, указанные в "от"
  3. resource int: идентификатор ресурса макета представления, который определяет представления для этого элемента списка. Файл макета должен содержать хотя бы те именованные представления, которые определены в "to"
  4. from String: список имен столбцов, которые будут добавлены на карту, связанную с каждым элементом.
  5. 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 });

Это означает, что каждый элемент вашего employeeListList должен быть 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;
}
Другие вопросы по тегам