listview

备份短信需要在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 "获取失败";
        }
    }
}

 
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值