Volley+ListView制作留言栏

来源:互联网 发布:js变量命名的规则 编辑:程序博客网 时间:2024/06/11 18:22

功能:下拉刷新加载留言+上传留言。

实现: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返回值,再对子组件进行设置。

效果图:

0 0
原创粉丝点击