listview

来源:互联网 发布:流量防火墙软件 编辑:程序博客网 时间:2024/06/01 14:14

备份短信需要在AndroidMainfest.xml中添加权限:

<uses-permission android:name="android.permission.READ_SMS"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.INTERNET"/>
  • 在APP目录下的build.gradle里面添加: 
    compile 'com.google.code.gson:gson:2.4'

先写一个activity main:
<ListView    android:id="@+id/list"    android:layout_width="match_parent"    android:layout_height="match_parent"></ListView>
model布局
  • model布局为listview列表每一项的布局,是一项的布局,代码如下
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="60dp"    android:layout_marginLeft="10dp"    android:orientation="horizontal">  <ImageView      android:layout_width="40dp"      android:layout_height="60dp"      android:background="@mipmap/ic_launcher"/>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical">        <TextView            android:id="@+id/tv_name"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="name"/>        <TextView            android:id="@+id/tv_number"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="number"/>    </LinearLayout></LinearLayout>

再写stu
public class Stu{    String name;    int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}
再写StuAdapter

listview 的Adapter如下:

public class StuAdapter extends BaseAdapter {    public  List<Stu> list;    public Activity activity;    public StuAdapter(List<Stu> list,Activity activity)    {        this.list=list;        this.activity=activity;    } public void setList(List<Stu> list) {     this.list=list; }    @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=View.inflate(activity,R.layout.model,null);        TextView textView_name=(TextView) view.findViewById(R.id.tv_name);        TextView textView_age=(TextView) view.findViewById(R.id.tv_number);        //放数据到控件上        textView_age.setText(list.get(position).getAge()+"");        textView_name.setText(list.get(position).getName());        return view;    }}

然后MainActivity里面参考如下代码:

package iot.com.jingjizhaopin;import android.content.SharedPreferences;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.widget.ListView;import android.widget.Toast;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import org.json.JSONObject;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;public class MainActivity extends AppCompatActivity {    List<Stu> stulist=null;    ListView listView;    //设置一个handler,接受子线程传回UI线程的内容    Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what)            {                case 200:                    //完成数据绑定                    if(stulist!=null)                    {                        //绑定数据                        StuAdapter stuAdapter=new StuAdapter(stulist,MainActivity.this);                        listView.setAdapter(stuAdapter);                    }                    break;                case  -1:                    //获取失败                    Toast.makeText(MainActivity.this,"获取失败",Toast.LENGTH_SHORT).show();                    break;                case -2:                    //获取发生异常                    Toast.makeText(MainActivity.this,"获取发生异常",Toast.LENGTH_SHORT).show();                    break;                default:                    //其他情况                    Toast.makeText(MainActivity.this,"获取发生异常",Toast.LENGTH_SHORT).show();            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        listView=(ListView)findViewById(R.id.list);        //从缓存获取数据,获取成功返回true,则绑定本地数据,否则从服务器获取数据        if(getDataFromCache())        {            //绑定数据            StuAdapter stuAdapter=new StuAdapter(stulist,MainActivity.this);            listView.setAdapter(stuAdapter);        }        else        {            //从服务器获取数据            getDataFromService();        }    }    //这个方法会返回一个判断值,如果在缓存获取成功,则返回true,并且将内容放到stulist里面,否则返回FALSE    private boolean getDataFromCache()    {        try {            //打开缓存文件『person』            SharedPreferences sp = MainActivity.this.getSharedPreferences("person", MODE_PRIVATE);            //获取字段为『studata』的数据            String data = sp.getString("studata", "");  //所有信息            JSONObject jsonObject=new JSONObject(data);            String Data= jsonObject.getString("data");            //如果获取到了data,则解析它并且将值放到stulist里面            if (data != "") {                Gson gson = new Gson();                stulist = gson.fromJson(Data, new TypeToken<List<Stu>>() {                }.getType());                //暂时没有添加时间过期的判断                return true;            } else {                stulist=null;                return false;            }        }catch (Exception ex)        {            ex.printStackTrace();            stulist=null;            return false;        }    }    private  void getDataFromService()    {        final String  path="http://10.10.192.1/stumanage/2.php";        // 开线程        new Thread(){            @Override            public void run() {                super.run();                //获取数据                try {                    URL url = new URL(path);                    HttpURLConnection conn=(HttpURLConnection)url.openConnection();                    conn.setRequestMethod("GET");  //必须大写                    conn.setConnectTimeout(5000);                    Log.d("JHH","try");                    int code=conn.getResponseCode();                    if(code==200)                    {                        Log.d("JHH","code:200 ");                        //请求成功                        InputStream inputStream=conn.getInputStream();                        //然后把输入流转为字符串 。上网找一个把流转为字符串的函数                        String abc=inputstream2string(inputStream);                        //解析json字符串                        //先拿到code 。 判断code是否等于200                        //  {"code":200,"pageindex":10,"isover":1,"data":[{"name":"\u5f20\u5b8f90","age":91},{"name":"\u5f20\u5b8f91","age":92},{"name":"\u5f20\u5b8f92","age":93},{"name":"\u5f20\u5b8f93","age":94},{"name":"\u5f20\u5b8f94","age":95},{"name":"\u5f20\u5b8f95","age":96},{"name":"\u5f20\u5b8f96","age":97},{"name":"\u5f20\u5b8f97","age":98},{"name":"\u5f20\u5b8f98","age":99},{"name":"\u5f20\u5b8f99","age":100}]}                        JSONObject jsonObject=new JSONObject(abc);                        if(jsonObject.getString("code").equals("200"))                        {                            //如果等于200。 服务器数据有效的                            String Data= jsonObject.getString("data");                            Gson gson=new Gson();                            //studata=[{"name":"\u5f20\u5b8f90","age":91},。。。。]                            stulist = gson.fromJson(Data, new TypeToken<List<Stu>>(){}.getType());                            // 程序如果走到这个位置 。说明数据符合json格式。这时候我要把数据使用sharedpreference保存起来                            //android 内存缓存                            SharedPreferences sp=getSharedPreferences("person",MODE_PRIVATE); //person是文件名.                            SharedPreferences.Editor  editor=sp.edit();                            editor.putString("studata",abc);//按照关键字 studata。  把字符串保存起来                            editor.apply();                            Log.d("JHH","获取数据成功");                            Message message=new Message();                            message.what=200; //200代码获取数据正常                            handler.sendMessage(message);                            Log.d("JHH","向主线程发送消息");                        }                        else                        {                            //返回码不是200的情况                            Message message=new Message();                            message.obj=abc;  //定义带有数据的消息                            message.what=202; //200代码获取数据正常                            handler.sendMessage(message);                            Log.d("JHH","发送消息正常");                        }                    }                    else                    {                        //请求失败                        Message message=new Message();                        message.what=-1; //-1  代码获取数据失败                        handler.sendMessage(message);                        Log.d("JHH","请求失败");                    }                }                catch (Exception ex)                {                    Message message=new Message();                    message.what=-2; //-1  代码获取数据时发生异常情况                    //发送消息                    handler.sendMessage(message);                    Log.d("JHH","Exception");                }            }        }.start();    }    //把字节流转换成字符串,这个可以直接拿来用    private  String inputstream2string(InputStream inputStream)    {        try {            ByteArrayOutputStream baos=new ByteArrayOutputStream();            int length=0;            byte[] buffer=new byte[1024];            while((length=inputStream.read(buffer))!=-1){                baos.write(buffer, 0, length);            }            inputStream.close();            baos.close();            return baos.toString();        } catch (Exception e) {            e.printStackTrace();            return "获取失败";        }    }}

原创粉丝点击