接口list

来源:互联网 发布:淘宝店铺权重是什么 编辑:程序博客网 时间:2024/06/09 15:19

备份短信需要在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"/>

2. APP目录下的build.gradle里面添加

compile 'com.google.code.gson:gson:2.4'

3. 先写一个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;

    }

}

 

4. 再写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 "获取失败";

        }

    }

}