我正在开发一个应用程序,在该应用程序中我需要从两个不同的 json 中检索数据,并且我必须在 android 中填充一个列表视图。在第一个 Json 中,我有一个对象数组,我有 id 对象和一个需要检索该对象数据的 url。
我怎样才能做到这一点?我可以检索对象并使用该对象填充列表视图,但我不知道如何获取单个对象的数据并将其显示在同一行中。
列表视图应该是这样的:
这是 Json1:
[
{
"id": "S1",
"url": "MyUrl1"
},
{
"id": "S2",
"url": "MyUrl2"
},
{
"id": "S3",
"url": "MyUrl3"
}
]
每个对象都是不同的。这是 Json2:
{
"id": "S1",
"temp": "20.03",
"time": "28 June 2018, 9:12:13"
}
因此,我可以检索 id 并在 listView 中显示所有 id 对象,但我无法为每个对象检索“temp”和“time”值。
这是我的代码:
适配器
public class SensorAdapter extends BaseAdapter{
ArrayList<String> id= new ArrayList<String>();
ArrayList<String> labelno_array = new ArrayList<String>();
Context context;
LayoutInflater inflater;
public SensorAdapter2(Context c, ArrayList<String> label_array)
{
context = c;
id= label_array;
// temp=temp_array;
// time=time_array;
//labelno_array = no_array;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return id.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position)
{
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
Holder holder;
// TODO Auto-generated method stub
if (v == null) {
v = inflater.inflate(R.layout.columns_sensor, null);
holder = new Holder();
holder.tv_labelname = (TextView)v.findViewById(R.id.idsensor);
v.setTag(holder);
} else {
holder = (Holder) v.getTag();
}
holder.tv_labelname.setText(id.get(position));
return v;
}
public class Holder
{
TextView tv_labelname,tv_labelno, tv_temp, tv_time;
}
这是我检索传感器数量的代码:
代码
class RetrieveFeedTask2 extends AsyncTask<Void, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
protected String doInBackground(Void... urls) {
String API_URL = "MyUrl";
try {
URL url = new URL(API_URL);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append("\n");
}
bufferedReader.close();
return stringBuilder.toString();
}
finally{
urlConnection.disconnect();
}
}
catch(Exception e) {
Log.e("ERROR", e.getMessage(), e);
return null;
}
}
protected void onPostExecute(String response) {
if(response == null) {
response = "THERE WAS AN ERROR";
}
// progressBar.setVisibility(View.GONE);
Log.i("INFO", response);
try
{
JSONArray array=new JSONArray(response);
for(int i = 0; i < array.length(); i++)
{
JSONObject obj = array.getJSONObject(i);
String mysenso=obj.getString("id");
String myurl=obj.getString("url");
//partire nuova chiamata con l'url.
label_no.add(myurl);
label_name.add(mysenso);
}
}
catch (JSONException e)
{
e.printStackTrace();
}
SensorAdapter2 adapter = new SensorAdapter2(Principale.this, label_name);
listView.setAdapter(adapter);
}
}
那么,如何在对象 url 处连接并在同一行中更新该对象的数据?