app从服务器上获取文本,放到列表

一.目的
从服务器上获取数据库里表格的每条信息,并在app中以列表表示,点击每条记录,可以出现详细信息
二.步骤
1.控件布局设计,添加一个ListView控件

 <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/my_list_view">

2.在activities中定义控件,并在随后的代码(后面的步骤)通过id找到该控件
ListView my_list_view;
3.在onCreate方法中新定义一个线程

 new Thread(new Runnable() {
                    @Override
                    public void run() {    
                    //这里的代码参照第六步
                     }  
                      }).start();  

4.在线程里重写的run方法体里,
1)定义一个字符串用来存放要访问的服务器程序地址,并将服务器程序的路径传入url类型的对象中

   String urlStr = "http://2k4154032o.qicp.vip:59770/MyServlet" + "/DaiBanShiJian";
    URL url = new URL(urlStr);

2)新建一个连接对象

 HttpURLConnection connection = (HttpURLConnection)url.openConnection();

3)设置连接对象相关参数

 connection.setRequestMethod("POST");
            //允许读取和连接最长时间为5秒
            connection.setReadTimeout(5000);
            connection.setConnectTimeout(5000);
            //允许输入输出
            connection.setDoInput(true);
            connection.setDoOutput(true);
            //设置本次连接是否自动处理重定向。
            //设置成true,系统自动处理重定向;设置成false,则需要自己从http reply中分析新的url
            //自己重新连接。
            connection.setInstanceFollowRedirects(true);

4)定义一个可变字符串用来保存从服务器上传来的数据

StringBuilder sb = new StringBuilder();

5)判断是否连接成功,如果成功,就使用一个BufferedReader保存从服务器上传来的字符(经过InputStreamReader把字节流转为字符流)

if(connection.getResponseCode() == HttpURLConnection.HTTP_OK){
                //如果连接上服务器端,客户端程序使用BufferedReader读取connection传来的数据
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                //在这里如果改为字符串数组的话,得知道数组长度
                String temp;
                //如果传入的数据不为空,则可变字符串添加该数据
                while((temp = reader.readLine()) != null){
                    sb.append(temp);
                    break;
                }
                reader.close();
            }else{
               // return "connection error:" + connection.getResponseCode();
            }

            connection.disconnect();
        }catch (Exception e){
          //  return e.toString();
        }

6)断开连接

   connection.disconnect();   

7)定义一个字符串用来将可变字符串保存为字符串

   String result=  sb; 

8)定义消息,并往消息里封装结果字符串,然后将消息发送到主线程

   Message msg = new Message();
                    //指定message 的id
                    msg.what = 0x13;
//Bundle主要用于传递数据;它保存的数据,是以key-value(键值对)的形式存在的。
                        Bundle data = new Bundle();
                        data.putString("result", result);
                        //mes利用Bundle传递数据
                        msg.setData(data);

//发送信息到主线程
                        hander.sendMessage(msg);

9)在run方法之外定义一个handler对象,并重写处理消息的方法

   Handler hander = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    if (msg.what == 0x10) {
  1. 在第九步重写的方法里,对传来的方法进行解析,并同意保存到一个字符串中
Bundle data = msg.getData();
                        String key = data.getString("result");//得到json返回的json

11)将结果字符串用逗号分割,放在一个列表中

List<String> gameids = java.util.Arrays.asList(key.split(","));

12)创建一个list集合 用来打包存放数据源,适配器需要这种格式的数据

List<Map<String, Object>>
   List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();

13)往List<Map<String, Object>>对象添加数据

  for (int i = 0; i < gameids.size(); i++) {
                                Map<String, Object> map = new HashMap<String, Object>(); // 实例化Map对象
                                map.put("data1", gameids.get(i));
                                listItems.add(map); // 将map对象添加到List集合中
                            }

14)创建适配器

SimpleAdapter adapter = new SimpleAdapter(DaiBanShiJian.this, listItems,
                                R.layout.main, new String[] { "data1"}, new int[] {
                                R.id.title }); // 创建SimpleAdapter

15)通过id获取列表视图,并给它对应的适配器

ListView listview = (ListView) findViewById(R.id.my_list_view); // 获取列表视图
                        listview.setAdapter(adapter); // 将适配器与ListView关联

16)设置listview的单击事件

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                            @Override
                            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                Map<String, Object> map = (Map<String, Object>) parent.getItemAtPosition(position);    //获取选择项的值
                                Toast.makeText(DaiBanShiJian.this, map.get("data1").toString(), Toast.LENGTH_SHORT).show();
                        }
                    });
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值