Volley+ListView制作留言栏

功能:下拉刷新加载留言+上传留言。
实现:Volley 获取/上传 数据,handler实现异步消息处理,JSON解析,自定义Adapter将数据填入ListView中,SwipeRefreshLayout下拉刷新。
请求接口:http://mclee.cn/getJson.php
上传接口:http://mclee.cn/postJson.php

1)Volley框架—— 获取/上传 数据

Volley是一个网络通信框架,适合进行数据量不大,但网络通信频繁的网络操作。

1.获取数据

①导入Volley的jar包:在build.grade中添加

`compile'com.android.volley:volley:1.0.0'`

②获取RequestQueue对象:

 RequestQueue rQueue = Volley.newRequestQueue(MainActitvity.this);

③创建StringRequest对象:

StringRequest stringRequest = new  StringRequest("http://mclee.cn/getJson.php",
new Response.Listener<String>(){
    public void onResponse(String response){
        Message message = handler.obtainMessage();
        message.what=1;
        message.obj = response;
        handler.sendMessage(message);
    }
},new Response.ErrorListener(){
    public void onErrorResponse(VolleyError error){
        handler.sendEmptyMessage(0);
    }
});

④将StringRequest对象添加到RequestQueue里:

rQueue.add(StringRequest);

⑤在AndroidManifest.xml中添加网络权限:

<uses-permission android:name="android.permission.INTERNET" />
2.上传数据
 putMessage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                RequestQueue requestQueue = Volley.newRequestQueue(PostMessage.this);
                StringRequest request = new StringRequest(Request.Method.POST,"http://mclee.cn/postJson.php", new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                    }
                }, new Response.ErrorListener() {
                    @Override
                   public void onErrorResponse(VolleyError error) {
                    }
                }){
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        Map<String,String> map = new HashMap<String, String>();
                        String result = eText.getText().toString();
                        map.put("json",result);
                        return map;
                    }
                };
                requestQueue.add(request);
            }
        });

2)JSON数据解析

Handler handler = new Handler(){
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what){
            case 1:
                JSONArray array = new JSONArray((String)msg.obj);
                for (int i =0;i<array.length();i++){
                    JSONObject object = array.getJSONObject(i);
                    String result = object.getString("message");
                    list.add(result);
                }
                lv.setAdapter(new Adapter(MainActivity.this,list));
                break;
            case 0:
                Toast.makeText(MainActivity.this,"网络异
                常",Toast.LENGTH_SHORT).show();
                break;
        }
    }
};

3)自定义Adapter,向ListView中填入数据

public class Adapter extends BaseAdapter {
    private TextView textView;
    private List<String> list;
    private Context context ;
    public Adapter (Context context, List<String> list){
        this.list = list;
        this.context = context;
    }
    @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) {
        View view = LayoutInflater.from(context).inflate(R.layout.item,null);
        textView=(TextView)view.findViewById(R.id.text);
        textView.setText(list.get(position));
        return view;
    }
}

新建Adapter类继承自BaseAdapter,重写构造方法和默认方法,这里将数据存入list中。
· getCount():返回ListView中要显示的子View数量,只要返回list的条目数就可以了。
· getItem(int position):返回ListView中的一个子条目,这里取list中的一条数据。
· getItemId(int position):根据ListView中的位置返回id。
· getView(int position, View convertView, ViewGroup parent):返回这个条目的整个信息,它是一个单独的布局文件。通过LayoutInflater类的inflate()方法可以根据布局文件获得其View返回值,再对子组件进行设置。

效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值