获取服务器json数据并解析显示listview上
通过服务器返回的json数据并解析显示到listview控件上:
运行图:
服务器返回json格式:
{
"activity": [
{
"name": "天王盖地虎",
"startTime": "2017-03-02 00:00"
},
{
"name": "宝塔镇河妖",
"startTime": "2017-03-02 00:00"
},
{
"name": "锄禾日当午",
"startTime": "2017-03-02 00:00"
},
{
"name": "汗滴禾下土",
"startTime": "2017-03-02 00:00"
},
{
"name": "谁知盘中餐",
"startTime": "2017-03-02 00:00"
},
{
"name": "粒粒皆辛苦",
"startTime": "2017-03-02 00:00"
},
{
"name": "套路深钢磨成针",
"startTime": "2017-03-02 00:00"
},
{
"name": "这个世界都是假的",
"startTime": "2017-03-02 00:00"
},
{
"name": "套路深钢磨成针",
"startTime": "2017-03-02 00:00"
},
{
"name": "套路深钢磨成针",
"startTime": "2017-03-02 00:00"
}
],
"description": "查询成功",
"flag": "success"
}
1、activity_main布局中添加listview控件
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />添加好listview控件后,
创建listview的item布局起名为:listview_item
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="80dp"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试活动" />
<TextView
android:layout_marginTop="20dp"
android:id="@+id/shijian"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试时间" />
</LinearLayout>
</RelativeLayout>这里面就是2个文本用来显示json中的数据
2、MainActivity代码编辑
布局完成后来看一下activity中代码:
因为我使用okhttp网络请求开发所以需要下载okhttp架包导入libs里,下载地址:http://download.csdn.net/detail/qq_26650589/9811409
下载完成后解压文件,把2个架包导入libs中(2个架包都需要导入)
public JSONObject object;
public ListView lv;
public ArrayList<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
list.clear();
lv=(ListView) findViewById(R.id.lv);
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient okHttpClient=new OkHttpClient();
//服务器返回的地址
Request request=new Request.Builder()
.url("http://10.0.2.2/date.json").build();
try {
Response response=okHttpClient.newCall(request).execute();
//获取到数据
String date=response.body().string();
//把数据传入解析josn数据方法
jsonJX(date);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();;
}
private void jsonJX(String date) {
//判断数据是空
if(date!=null){
try {
//将字符串转换成jsonObject对象
JSONObject jsonObject = new JSONObject(date);
//获取返回数据中flag的值
String resultCode = jsonObject.getString("flag");
//如果返回的值是success则正确
if (resultCode.equals("success")) {
//获取到json数据中里的activity数组内容
JSONArray resultJsonArray = jsonObject.getJSONArray("activity");
//遍历
for(int i=0;i<resultJsonArray.length();i++){
object=resultJsonArray.getJSONObject(i);
Map<String, Object> map=new HashMap<String, Object>();
try {
//获取到json数据中的activity数组里的内容name
String name = object.getString("name");
//获取到json数据中的activity数组里的内容startTime
String shijian=object.getString("startTime");
//存入map
map.put("name", name);
map.put("shijian", shijian);
//ArrayList集合
list.add(map);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
//Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据
@SuppressLint("HandlerLeak")
public Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
Mybaseadapter list_item=new Mybaseadapter();
lv.setAdapter(list_item);
break;
}
}
};
//listview的适配器
public class Mybaseadapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = getLayoutInflater().inflate(R.layout.listview_item, null);
viewHolder.textView = (TextView) convertView.findViewById(R.id.tv);
viewHolder.shijian = (TextView) convertView.findViewById(R.id.shijian);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.textView.setText(list.get(position).get("name").toString());
viewHolder.shijian.setText(list.get(position).get("shijian").toString());
return convertView;
}
}
final static class ViewHolder {
TextView textView;
TextView shijian;
} 注意:这里如果不开启handler将会报错:android.view.ViewRootImpl$CalledFromWrongThreadException错误。
最后1步 既然访问网络就必须添加访问网络权限: <uses-permission android:name="android.permission.INTERNET" />
好了到这里就能正常显示并解析出来了
相关文章:
将图片显示到listview上:http://blog.csdn.net/qq_26650589/article/details/71627933
将视频显示到listview上:http://blog.csdn.net/qq_26650589/article/details/77774703
获取数据显示RecyclerView: http://blog.csdn.net/qq_26650589/article/details/78084350
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
