Получение данных из json api, но не может быть просмотрено в списке

Я хочу показать данные в виде списка из rest api. Сначала я сделал почтовый запрос к данному API, используя задачу async

 public class SendRequest extends AsyncTask<String, Void, String> {

        protected void onPreExecute(){}

        protected String doInBackground(String... arg0) {

            try{

                URL url = new URL("https://staging.ineyetech.com/inweigh_dev/webservice/itinerary_list\n" +
                        "\n");

                JSONObject postDataParams = new JSONObject();

                postDataParams.put("device_type", "1");
                postDataParams.put("module_type", "2");
                postDataParams.put("user_time_zone", "Asia/Calcutta");
                postDataParams.put("unit_type", "2");
                postDataParams.put("page_no", "1");
                postDataParams.put("bluetooth_battery_percentage", "25");
                postDataParams.put("app_version", "Android 1.3");
                postDataParams.put("device_id", "18fd7cb2716cb0e4");
                postDataParams.put("device_name", "Moto G (4)");
                postDataParams.put("os_version", "7.0");
                postDataParams.put("device_token", "cNy2KZpIFwA");
                postDataParams.put("bluetooth_device_id", "885");
                postDataParams.put("itinerary_type", "2");
                postDataParams.put("oauth_token", "aa0f15f302fe1c0ffe7e3655a58f56bc");
                postDataParams.put("user_id", "205");

                Log.e("params",postDataParams.toString());

                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(15000 /* milliseconds */);
                conn.setConnectTimeout(15000 /* milliseconds */);
                conn.setRequestMethod("POST");
                conn.setDoInput(true);
                conn.setDoOutput(true);

                OutputStream os = conn.getOutputStream();
                BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(os, "UTF-8"));
                writer.write(getPostDataString(postDataParams));

                writer.flush();
                writer.close();
                os.close();

                int responseCode=conn.getResponseCode();

                if (responseCode == HttpsURLConnection.HTTP_OK) {

                    BufferedReader in=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                    StringBuffer sb = new StringBuffer("");
                    String line="";

                    while((line = in.readLine()) != null) {

                        sb.append(line);
                        break;
                    }

                    in.close();
                    return sb.toString();

                }
                else {
                    return new String("false : "+responseCode);
                }
            }
            catch(Exception e){
                return new String("Exception: " + e.getMessage());
            }
        }

Я выполнил почтовый запрос с помощью задачи Async и получил ответ от api. Но я хочу, чтобы этот ответ отображался в виде списка. Итак, я сделал это.

        @Override
        protected void onPostExecute(String result) {

            super.onPostExecute(result);
            //text.setText(result);

            ListAdapter adapter = new SimpleAdapter(
                    MainActivity.this, airlines,
                    R.layout.details, new String[]{"flightname", "route",
                    "flightnum","time","date"}, new int[]{R.id.flightname,
                    R.id.route, R.id.flightnum,R.id.time,R.id.date});

            lv.setAdapter(adapter);
        }
    }

Несмотря на то, что я получаю ответ от api, я не вижу его в виде списка. Нужна помощь. заранее спасибо

Где вы используете результат, который вы получили от api? полученный результат находится в строке «результат» onPostExecute. А что это за «авиалинии»?

Amit Jangid 26.10.2018 06:23

авиакомпании - арайлист. Сначала в методе post execute я использовал набор текста, чтобы просмотреть ответ, который отлично работает. Теперь я хочу, чтобы эти данные отображались в списке.

Muthu 26.10.2018 06:37

Итак, вы используете результат, полученный от api? для отображения в списке, и я думаю, что вы этого не делаете .. вы добавляли данные в свои авиакомпании? и как выглядит ответ api?

Amit Jangid 26.10.2018 06:38

Это ответ, который я получил от api {"success": 1, "message": "success", "current_date": "2018-10-26" ‌, "data": [{"id": "9165‌ "," route_type ":" 2 "," ‌ flight_name ":" Emirat es "," flight_no ":" EK5‌ 45 "," date_display ":" 13-03-2018 "," time_display ":" 00 : 00 "," display_‌ route ":" MAA to DXB "," itinerary_type ":" 2 "} и т. д.

Muthu 26.10.2018 07:11
0
4
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Внутри protected void onPostExecute(String result) вам нужно создать JsonObject, затем JsonArray авиакомпаний, а затем добавить в массив airlines.

Нужно сделать что-то вроде,

try {

    JSONObject obj = new JSONObject(result);

    JsonArray airlinesArray = obj.getJSONArray("data");
    for(int i = 0; i < airlinesArray.size(); i++){
        JSONObject object = airlinesArray.get(i);
        //create airlines arraylist data type object with data and initialize variables using object.getString("s_name");
        // Then insert that data into arraylist
        // airlines.add(data);
    }

} catch (Exception e) {

}

После этого создайте и добавьте адаптер в listView.

как добавить данные в Arraylist.?

Muthu 26.10.2018 07:37

Поместите класс типа данных вашей авиакомпании

Exigente05 26.10.2018 07:41

как вы объявляете авиакомпании arrayList?

Exigente05 26.10.2018 07:52

Если я буду следовать вашему коду, я не вижу ни одной строки для добавления данных в arraylist авиакомпаний. Перед добавлением адаптера вам необходимо добавить в него.

Внутри метода onPostExecute поместите код ниже:

try {

JSONObject obj = new JSONObject(result);

JsonArray airlinesArray = obj.getJSONArray("data");
for(int i = 0; i < airlinesArray.size(); i++){
    JSONObject object = airlinesArray.get(i);
    // do code to add data into airlines arraylist
}

} catch (Exception e) {

}
 //here put your adapter setting code
ListAdapter adapter = new SimpleAdapter(
                MainActivity.this, airlines,
                R.layout.details, new String[]{"flightname", "route",
                "flightnum","time","date"}, new int[]{R.id.flightname,
                R.id.route, R.id.flightnum,R.id.time,R.id.date});

        lv.setAdapter(adapter);

Другие вопросы по теме