问题遇到的现象和发生背景
安卓应用开发的时候将json转换成array,部分内容是默认值,0和null之类的,数据源没有空值
数据源
https://api.thingspeak.com/channels/1617576/feed.json
代码参考了:
https://blog.csdn.net/qq_37377691/article/details/105653454
中的内容
他的代码是完全可以正常显示的。
问题相关代码,请勿粘贴截图
public class MainActivity extends AppCompatActivity {
private ListView Lv_main_list;
private List<DATA> DATAList = new ArrayList<DATA>();
private ProgressDialog progressDialog;
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Lv_main_list =(ListView) findViewById(R.id.Lv_main_list);
//实例化进度条对话框
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("正在加载中!");
myAdapter = new MyAdapter();
Lv_main_list.setAdapter(myAdapter);
}
//适配器
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return DATAList.size();
}
@Override
public Object getItem(int i) {
return DATAList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
//添加JSON数据对应出来的TextView,显示到主界面,非主要代码
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
LinearLayout layout = new LinearLayout(MainActivity.this);
layout.setOrientation(LinearLayout.VERTICAL);
TextView textViewentry_id = new TextView(MainActivity.this);
textViewentry_id.setText(DATAList.get(i).getentry_id()+"\t"+" ");
TextView textViewfield1 = new TextView(MainActivity.this);
textViewfield1.setText(DATAList.get(i).getfield1()+"\t");
TextView textViewfield2 = new TextView(MainActivity.this);
textViewfield2.setText(DATAList.get(i).getfield2()+"\t");
TextView textViewcreated_at= new TextView(MainActivity.this);
textViewcreated_at.setText(DATAList.get(i).getcreated_at()+"\t");
layout.addView(textViewentry_id);
layout.addView(textViewfield1);
layout.addView(textViewfield2);
layout.addView(textViewcreated_at);
return layout;
}
}
//获取xml数据
public void getJson(View view){
new MyTask().execute();
}
//通过异步任务类获取数据
class MyTask extends AsyncTask {
private DATA jsonTeacherEntity;
//准备执行
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}
@Override
protected Object doInBackground(Object[] objects) {
//首先我们要通过代码从android端通过get或者post方式访问网页,并获取网页的内容
//path为获取JSON数据的接口
String path="https://api.thingspeak.com/channels/1617576/feed.json";
try {
URL url = new URL(path);
//获取连接对象
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//设置请求方式
httpURLConnection.setRequestMethod("GET");
//设置连接超时
httpURLConnection.setConnectTimeout(5000);
//获取响应码
int code = httpURLConnection.getResponseCode();
if (code==200)
{
//响应成功,获取服务器返回过来的数据
final InputStream is = httpURLConnection.getInputStream();
//测试数据
StringBuffer stringBuffer = new StringBuffer();
String str=null;
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while ((str=br.readLine())!=null){
stringBuffer.append(str);
}
//使用fastJson解析Json
Log.e("Json数据", "Json数据: "+stringBuffer.toString() );
/*
因为JSON数据里有一些我们不需要的属性,我们需要把
需要的Json数据提取出来,这里我写得比较复杂,方便学习
*/
String Data = stringBuffer.toString();
JSONObject jb = JSON.parseObject(Data);
String data3 = jb.getString("feeds");
Log.e("data3", "data3"+data3);
List<DATA> DATAs = JSON.parseArray(data3, DATA.class);
Log.e("field1","TT "+ DATAs );
for (DATA TT:DATAs)
{
jsonTeacherEntity = new DATA();
//Log.e("field1","TT "+ TT.getcreated_at() );
int entry_id = TT.getentry_id();
String field1 = TT.getfield1();
String field2 = TT.getfield2();
String created_at = TT.getcreated_at();
//Log.e("field1","field1 "+ field1 );
//Log.e("id","id"+entry_id);
//Log.e("created_atd","created_at"+created_at);
//Log.e("DATAs","DATAs"+DATAs);
jsonTeacherEntity.setfield1(field1);
jsonTeacherEntity.setfield2(field2);
jsonTeacherEntity.setentry_id(entry_id);
jsonTeacherEntity.setcreated_at(created_at);
DATAList.add(jsonTeacherEntity);
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
//通知适配器发生改变
myAdapter.notifyDataSetChanged();
//取消进度条对话框
progressDialog.cancel();
}
}
}
DATA类:
package com.example.thingspeakdata;
public class DATA {
private int entry_id;//编号
private String field1;//field1
private String field2;//field2
private String created_at;//time
public int getentry_id() {
return entry_id;
}
public void setentry_id(int entry_id) {
this.entry_id = entry_id;
}
public String getfield1() {
return field1;
}
public void setfield1(String field1) {
this.field1 = field1;
}
public String getfield2() {
return field2;
}
public void setfield2(String field2) {
this.field2 = field2;
}
public String getcreated_at() {
return created_at;
}
public void setcreated_at(String created_at) {
this.created_at = created_at;
}
}
运行结果及报错内容
我的解答思路和尝试过的方法
在调试的时候发现,在data3中显示为正常[{"field1":"19","field2":"61","entry_id":735,"created_at":"2021-12-26T10:52:48Z"},{"field1":"19","field2":"61","entry_id":736,"created_at"
但是在后面经过JSON.parseArray后在for循环里面就显示为空值了,由于还是第一次接触json相关内容,没能尝试更多方法。
我想要达到的结果
想达到的结果就是全部正常显示