从android中的API检索数据到ListView
Posted
技术标签:
【中文标题】从android中的API检索数据到ListView【英文标题】:Retrieve data to ListView from API in android 【发布时间】: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);
【问题讨论】:
【参考方案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=42Request request = new Request.Builder() .url("http://www.autotrack.rs/android_juzna_backa/get_voznja.php?voznja_id=42")
是的,你是对的,这是硬编码版本,voznja_id = 42。以上是关于从android中的API检索数据到ListView的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何让我检索到的(来自 mysql)JSON 解析数据添加到 ListView 每分钟刷新一次
如何从firebase检索多个数据到android中的列表视图?
我如何从firebase检索数据到android listview顶部[重复]