博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android学习系列16]Android把php输出的json加载到listview
阅读量:5338 次
发布时间:2019-06-15

本文共 5075 字,大约阅读时间需要 16 分钟。

首先写个php脚本输出json,注意,还要输出回车,方便android的bufferreader读取一行 

bookid = $id; $this->bookname = $name; $this->bookinfo = $info; } } $book1 = new Book("1","高等数学","一本好书"); $book2 = new Book("2","呵呵呵呵","一本好书"); $book3 = new Book("3","哈哈哈哈","一本好书"); //把对象转成json 输出 echo json_encode($book1); echo "\r\n"; echo json_encode($book2); echo "\r\n"; echo json_encode($book3); echo "\r\n"; ?>
View Code

 

然后在android的客户端,用子线程发送http请求获取数据,然后发消息给主线程的handler更新listview

listview的一行的样式  one_item.xml  :

View Code

 

activity的java代码:

//搞了我半天,整个流程应该是这样的//因为http获取json的数据 写到一个新线程里  new thread ( runnableUi )//在新线程runnableUi里,有一个initDataAndAdapter() 用来获得网络数据 放进listbook,获取完后发消息给 主线程的handler//handler收到消息后, 把数据源listbook 传给  listview 的adapter (即更新主线程界面)public class MainActivity extends Activity {        List
listBook; ListView listView; // 构建Runnable对象,在runnable中更新界面 Runnable runnableUi = new Runnable(){ @Override public void run() { initDataAndAdapter(); } }; //主线程的handler, http请求获得数据后 会调用这个主线程的handler 来修改主线程界面(绑定listview的adapter) Handler handler = new Handler(){ public void handleMessage(Message msg) { //在主线程的handler里 修改listview的适配器 listView.setAdapter(new MyListAdapter(getApplicationContext(), listBook )); }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.listView1); listBook = new ArrayList
(); new Thread( runnableUi ).start(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void initDataAndAdapter() { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet("http://taobibi.kuphp.net/"); Book book; try { HttpResponse httpResponse = httpClient.execute(httpGet); BufferedReader bufferReader = new BufferedReader( new InputStreamReader( httpResponse.getEntity().getContent() ) ); for(String s = bufferReader.readLine(); s != null; s = bufferReader.readLine()) { //每行为一个json对象 JSONObject jsonObject = new JSONObject( s ); Log.v("mytag", s); //然后放进book对象 book = new Book(); book.bookId = jsonObject.getString("bookid"); book.bookName = jsonObject.getString("bookname"); book.bookInfo = jsonObject.getString("bookinfo"); //然后把book放进list listBook.add(book); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } //数据全都接收到listView以后,发消息给主线程里面的handler,让他去修改listview 的 setadapter handler.sendEmptyMessage(0); } class Book { String bookId; String bookName; String bookInfo; } class MyListAdapter extends BaseAdapter { Context context; List
listBook; MyListAdapter(Context con , List
list ) { this.context = con; listBook = (ArrayList
)list; } @Override public int getCount() { return listBook.size(); } @Override public Object getItem(int arg0) { return arg0; } @Override public long getItemId(int arg0) { return arg0; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflator = LayoutInflater.from(context); View oneView = inflator.inflate(R.layout.one_item, null); TextView textView = (TextView)oneView.findViewById(R.id.textview); String str = listBook.get(position).bookId + " " + listBook.get(position).bookName + " " + listBook.get(position).bookInfo; textView.setText( str ); return oneView; } }}
View Code

 

 

 

 

参考:

解决NetworkOnMainThreadException    

Android访问php取回json数据       

 

转载于:https://www.cnblogs.com/sleeptothedeath/p/3699023.html

你可能感兴趣的文章
Hangfire在ASP.NET CORE中的简单实现方法
查看>>
Algorithm——何为算法?
查看>>
Web服务器的原理
查看>>
小强升职计读书笔记
查看>>
常用的107条Javascript
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
忘记root密码,怎么办
查看>>
linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
查看>>
《黑客与画家》 读书笔记
查看>>
bzoj4407: 于神之怒加强版
查看>>
mysql统计一张表中条目个数的方法
查看>>
ArcGIS多面体(multipatch)解析——引
查看>>
css3渐变画斜线 demo
查看>>
JS性能DOM优化
查看>>
设计模式 单例模式 使用模板及智能指针
查看>>
HAL层三类函数及其作用
查看>>
Odoo 去掉 恼人的 "上午"和"下午"
查看>>
web@h,c小总结
查看>>
java编程思想笔记(一)——面向对象导论
查看>>
Data Structure 基本概念
查看>>