【问题标题】:Retrieve data to ListView from API in android从android中的API检索数据到ListView
【发布时间】:2021-04-30 10:45:30
【问题描述】:

我需要从此链接http://www.autotrack.rs/android_juzna_backa/get_voznja.php? 将数据检索到列表视图。我需要使用 value-POST 方法发送密钥,以获得如下信息:http://www.autotrack.rs/android_juzna_backa/get_voznja.php?voznja_id=42。我的代码如下:谢谢。错误 org.json.JSONObject$1 类型数据的值为 null 无法转换为 JSONArray

 public class fetchData extends AsyncTask<String, String, String> {

        @Override
        public void onPreExecute() {
            super.onPreExecute();
            swipeRefresh.setRefreshing(true);
        }

        @Override
        protected String doInBackground(String... params) {
            arrayList.clear();
            String result = null;
            try {
                OkHttpClient client = new OkHttpClient().newBuilder()
                        .build();
                MediaType mediaType = MediaType.parse("text/plain");
                RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                        .addFormDataPart("voznja_id", "42")
                        .build();
                Request request = new Request.Builder()
                        .url("http://www.autotrack.rs/android_juzna_backa/get_voznja.php")
                        .method("POST", body)
                        .build();
                try {
                    response = client.newCall(request).execute();
//                System.out.println(response.body().string());
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return "";


            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }

        @Override
        public void onPostExecute(String rezultat) {

            try {
                rezultat = response.body().string();
            }catch (Exception m)
            {
                m.printStackTrace();
            }
                Intent intent;
                Gson gson = new Gson();
                Type type = new TypeToken<Voznja>() {
                }.getType();

                Voznja voznja = gson.fromJson(rezultat, type);

                Intent im = new Intent(getApplicationContext(), Unos.class);
                im.putExtra("voznja", voznja);
               // startActivity(im);
             swipeRefresh.setRefreshing(false);
                try {
                    JSONObject object = new JSONObject(rezultat);
                   JSONArray array = object.getJSONArray("data");

                    for (int i = 0; i < array.length(); i++) {

                        JSONObject jsonObject = array.getJSONObject(i);
                        String id = jsonObject.getString("id");
                        String vozilo_id = jsonObject.getString("vozilo_id");
                        String vozac_id = jsonObject.getString("vozac_id");
                        String pocetna_kilometraza = jsonObject.getString("pocetna_kilometraza");
                        String pocetno_vreme = jsonObject.getString("pocetno_vreme");
                        String razlog = jsonObject.getString("razlog");
                        String zavrsna_kilometraza = jsonObject.getString("zavrsna_kilometraza");
                        String zavrsno_vreme = jsonObject.getString("zavrsno_vreme");
                        String moto_sati = jsonObject.getString("moto_sati");
                        String id_projekat_jb = jsonObject.getString("id_projekat_jb");

                        ItemModel model = new ItemModel();
                        model.setVoznja_id(id);
                        model.setVoziloId(vozilo_id);
                        model.setVozac_id(vozac_id);
                        model.setPocetnaKilometraza(pocetna_kilometraza);
                        model.setPocetnoVreme(pocetno_vreme);
                        model.setRazlog(razlog);
                        model.setZavrsnaKilometraza(zavrsna_kilometraza);
                        model.setZavrsnoVreme(zavrsno_vreme);
                        model.setMotoSati(moto_sati);
                        model.setProjekatId(id_projekat_jb);
                        arrayList.add(model);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                VoznjaAdapter adapter = new VoznjaAdapter(ListaVoznji.this, arrayList);
                listView.setAdapter(adapter);

【问题讨论】:

    标签: java android android-listview


    【解决方案1】:

    您的 api 响应是 JSONObject。

    {"data":{"id":"42","vozilo_id":"777777003561","vozac_id":"2","pocetna_kilometraza":"50000","pocetno_vreme":"2020-12-25 07:15:00","projekat":null,"razlog":"Sastanak","zavrsna_kilometraza":"50150","zavrsno_vreme":"2020-12-25 10:45:00","moto_sati":"3","insert_time":"2021-01-08 10:47:33.683885","id_projekat_jb":"330"}}
    

    所以你应该使用 JSONObject 而不是 JSONArray

                try {
                    JSONObject object = new JSONObject(rezultat);
                   JSONObject jsonObject = object.getJSONObject("data");
    
                        String id = jsonObject.getString("id");
                        String vozilo_id = jsonObject.getString("vozilo_id");
                        String vozac_id = jsonObject.getString("vozac_id");
                        String pocetna_kilometraza = jsonObject.getString("pocetna_kilometraza");
                        String pocetno_vreme = jsonObject.getString("pocetno_vreme");
                        String razlog = jsonObject.getString("razlog");
                        String zavrsna_kilometraza = jsonObject.getString("zavrsna_kilometraza");
                        String zavrsno_vreme = jsonObject.getString("zavrsno_vreme");
                        String moto_sati = jsonObject.getString("moto_sati");
                        String id_projekat_jb = jsonObject.getString("id_projekat_jb");
    
                        ItemModel model = new ItemModel();
                        model.setVoznja_id(id);
                        model.setVoziloId(vozilo_id);
                        model.setVozac_id(vozac_id);
                        model.setPocetnaKilometraza(pocetna_kilometraza);
                        model.setPocetnoVreme(pocetno_vreme);
                        model.setRazlog(razlog);
                        model.setZavrsnaKilometraza(zavrsna_kilometraza);
                        model.setZavrsnoVreme(zavrsno_vreme);
                        model.setMotoSati(moto_sati);
                        model.setProjekatId(id_projekat_jb);
                        arrayList.add(model);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
    

    【讨论】:

    • 我认为你的 api 是 GET 方法。在您的代码中,您使用了 POST 方法。对吗?
    • 是的,api是用GET方法,但是我需要发送voznja_id作为参数来获取结果
    • 在这种情况下,您可以将 url 设置为 ?voznja_id=42。所以autotrack.rs/android_juzna_backa/get_voznja.php?voznja_id=42
    • Request request = new Request.Builder() .url("http://www.autotrack.rs/android_juzna_backa/get_voznja.php?voznja_id=42")
    • 是的,你是对的,这是硬编码版本,voznja_id = 42。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多