在接口中实现

来源:互联网 发布:目前就业形势 数据分析 编辑:程序博客网 时间:2024/06/05 05:20

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

<uses-permissionandroid:name="android.permission.READ_SMS"/>

    <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permissionandroid: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"?>

·        <LinearLayoutxmlns: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如下

publicclassStuAdapterextendsBaseAdapter {

    public List<Stu> list;

    public Activity activity;

    public StuAdapter(List<Stu> list,Activityactivity)

    {

       this.list=list;

       this.activity=activity;

    }

 publicvoid setList(List<Stu> list)

 {

     this.list=list;

 }

    @Override

    publicint getCount() {

       return list.size();

    }

 

    @Override

    public Object getItem(int position) {

       return list.get(position);

    }

 

    @Override

    publiclong getItemId(int position) {

       return position;

    }

 

    @Override

    public View getView(int position, View convertView, ViewGroupparent) {

       //数据放到模版中

       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;

 

importandroid.content.SharedPreferences;

importandroid.os.Handler;

importandroid.os.Message;

importandroid.support.v7.app.AppCompatActivity;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.widget.ListView;

importandroid.widget.Toast;

 

importcom.google.gson.Gson;

importcom.google.gson.reflect.TypeToken;

 

importorg.json.JSONObject;

 

importjava.io.ByteArrayOutputStream;

importjava.io.InputStream;

importjava.net.HttpURLConnection;

importjava.net.URL;

importjava.util.List;

 

publicclassMainActivityextendsAppCompatActivity {

   List<Stu> stulist=null;

   ListView listView;

 

   //设置一个handler,接受子线程传回UI线程的内容

   Handler handler =new Handler(){

       @Override

       publicvoid handleMessage(Message msg) {

           super.handleMessage(msg);

 

           switch (msg.what)

           {

               case200:

                   //完成数据绑定

                   if(stulist!=null)

                   {

                       //绑定数据

                       StuAdapterstuAdapter=newStuAdapter(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

   protectedvoid 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

   privateboolean getDataFromCache()

   {

       try {

           //打开缓存文件『person

           SharedPreferences sp =MainActivity.this.getSharedPreferences("person", MODE_PRIVATE);

           //获取字段为『studata』的数据

           String data =sp.getString("studata",""); //所有信息

           JSONObject jsonObject=newJSONObject(data);

           String Data=jsonObject.getString("data");

           //如果获取到了data,则解析它并且将值放到stulist里面

           if (data !="") {

               Gson gson =new Gson();

               stulist = gson.fromJson(Data,newTypeToken<List<Stu>>() {

               }.getType());

               //暂时没有添加时间过期的判断

               returntrue;

           }else {

               stulist=null;

               returnfalse;

           }

       }catch (Exception ex)

       {

           ex.printStackTrace();

           stulist=null;

           returnfalse;

       }

 

   }

 

   private voidgetDataFromService()

   {

       final String path="http://10.10.192.1/stumanage/2.php";

       //开线程

       new Thread(){

           @Override

           publicvoid run() {

               super.run();

               //获取数据

               try {

                   URL url =new URL(path);

                   HttpURLConnection conn=(HttpURLConnection)url.openConnection();

                   conn.setRequestMethod("GET"); //必须大写

                   conn.setConnectTimeout(5000);

                   Log.d("JHH","try");

                   intcode=conn.getResponseCode();

                   if(code==200)

                   {

                       Log.d("JHH","code:200");

                       //请求成功

                       InputStreaminputStream=conn.getInputStream();

                       //然后把输入流转为字符串。上网找一个把流转为字符串的函数

                       Stringabc=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}]}

 

                       JSONObjectjsonObject=newJSONObject(abc);

                       if(jsonObject.getString("code").equals("200"))

                       {

                           //如果等于200服务器数据有效的

 

                           StringData= jsonObject.getString("data");

                           Gsongson=new Gson();

 

                           //studata=[{"name":"\u5f20\u5b8f90","age":91},。。。。]

                           stulist =gson.fromJson(Data,newTypeToken<List<Stu>>(){}.getType());

                           //程序如果走到这个位置。说明数据符合json格式。这时候我要把数据使用sharedpreference保存起来

                           //android内存缓存

                           SharedPreferencessp=getSharedPreferences("person",MODE_PRIVATE);//person是文件名.

                           SharedPreferences.Editor editor=sp.edit();

                           editor.putString("studata",abc);//按照关键字 studata 把字符串保存起来

                           editor.apply();

 

                           Log.d("JHH","获取数据成功");

                           Messagemessage=new Message();

                           message.what=200;//200代码获取数据正常

                           handler.sendMessage(message);

                           Log.d("JHH","向主线程发送消息");

                       }

                       else

                       {

                           //返回码不是200的情况

                           Messagemessage=new Message();

                           message.obj=abc; //定义带有数据的消息

                           message.what=202;//200代码获取数据正常

                           handler.sendMessage(message);

                           Log.d("JHH","发送消息正常");

                       }

 

 

                   }

                   else

                   {

                       //请求失败

                       Messagemessage=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 {

           ByteArrayOutputStreambaos=newByteArrayOutputStream();

           int length=0;

           byte[] buffer=newbyte[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"获取失败";

       }

   }

}

原创粉丝点击