PHPActivity.java

package www.wulian1.com.webview;

import android.content.SharedPreferences;import android.icu.text.IDNA;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ListView;import android.widget.Toast;

import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;

import org.json.JSONObject;import org.xml.sax.ErrorHandler;

import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;

public class PHPActivity extends AppCompatActivity {

ListView listView;    List<StuManage> stuList=null;

private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            String abc = (String) msg.obj;            Toast.makeText(PHPActivity.this, "我输出的字符:" + abc, Toast.LENGTH_SHORT).show();            switch (msg.what) {                case 200:                    //获取到数据                    //List<StuManage> stuList=(List<StuManage>)msg.obj;                    if(stuList!=null &&stuList.size()>0) {                        MyAdapter myAdapter = new MyAdapter(stuList, PHPActivity.this);                        listView.setAdapter(myAdapter);                    }                    else                    {                        Toast.makeText(PHPActivity.this,"没有数据",Toast.LENGTH_SHORT).show();                    }                    break;                case 2:                    //获取失败                    Toast.makeText(PHPActivity.this,"获取数据失败",Toast.LENGTH_SHORT).show();                    break;                case 0:                    //获取发生异常                    Toast.makeText(PHPActivity.this,"获取数据异常",Toast.LENGTH_SHORT).show();                    break;                default:                    //其他情况                    Toast.makeText(PHPActivity.this,"获取数据异常2",Toast.LENGTH_SHORT).show();            }        }    };

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_php);

listView=(ListView)findViewById(R.id.lv_1);        SharedPreferences sp=this.getSharedPreferences("WebView",MODE_PRIVATE);        String dataString=sp.getString("name","");        if (!"".equals(dataString)){            Gson gson=new Gson();            try{                JSONObject jsonObject=new JSONObject(dataString);                String timestamp=jsonObject.getString("timestamp");                StuManage stuManage=gson.fromJson(dataString,StuManage.class);                Long nowtimestamp=System.currentTimeMillis();                Long offday=(nowtimestamp - stuManage.getTimestamp())/(1000*60*60*24);                Log.d("84","offday="+offday);                if (offday<30){                    //从缓存中获取数据                    dataget();                    Toast.makeText(PHPActivity.this,"未过期",Toast.LENGTH_SHORT).show();                    Log.d("84","距离上次天数为"+offday);                }else {                    getDataFromService();                    Toast.makeText(PHPActivity.this,"已过期",Toast.LENGTH_SHORT).show();                    Log.d("84","距离上次天数为"+offday);                }            }catch (Exception e){                e.printStackTrace();                Toast.makeText(PHPActivity.this,"获取时间异常",Toast.LENGTH_SHORT).show();                Log.d("84","获取时间异常");            }        }else {            //没拿到数据,重新获取数据            getDataFromCache();        }

Button btn_getstring = (Button) findViewById(R.id.btn_1);        Button btn_getjson = (Button) findViewById(R.id.btn_2);

btn_getjson.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (getDataFromCache()) {                    //拿到数据,绑定数据                    MyAdapter myAdapter=new MyAdapter(stuList,PHPActivity.this);                    listView.setAdapter(myAdapter);

Log.d("84","cache");                } else {                    getDataFromService();                    Log.d("84","Service");                }

//   Toast.makeText(PHPActivity.this,"准备完成",Toast.LENGTH_SHORT).show();            }        });    }

private void dataget() {        if (getDataFromCache()){            MyAdapter myAdapter=new MyAdapter(stuList,PHPActivity.this);            listView.setAdapter(myAdapter);        }else {            getDataFromService();        }    }

public String readInfoStream(InputStream input) throws Exception {        if (input == null) {            throw new Exception("输入流为null");        }        //字节数组        byte[] bcache = new byte[2048];        int readSize = 0;//每次读取的字节长度        int totalSize = 0;//总字节长度        ByteArrayOutputStream infoStream = new ByteArrayOutputStream();        try {            //一次性读取2048字节            while ((readSize = input.read(bcache)) > 0) {                totalSize += readSize;

//将bcache中读取的input数据写入infoStream                infoStream.write(bcache, 0, readSize);            }        } catch (IOException e1) {            throw new Exception("输入流读取异常");        } finally {            try {                //输入流关闭                input.close();            } catch (IOException e) {                throw new Exception("输入流关闭异常");            }        }

try {            return infoStream.toString("utf-8");        } catch (UnsupportedEncodingException e) {            throw new Exception("输出异常");        }    }

private boolean getDataFromCache() {        try {            SharedPreferences sharedPreferences = PHPActivity.this.getSharedPreferences("WebView", MODE_PRIVATE);            String data = sharedPreferences.getString("data", "");            //JSONObject jsonObject=new JSONObject(data);            //String code=jsonObject.get("code").toString();            if (data != "") {                // String datas=jsonObject.get("datas").toString();                Gson gson = new Gson();                stuList = gson.fromJson(data, new TypeToken<List<StuManage>>() {                }.getType());                return true;            } else {                stuList = null;                return false;            }        } catch (Exception e) {            e.printStackTrace();            stuList = null;            return false;        }    }

private void getDataFromService() {        final String path = "http://10.10.192.58:8081/Json/Json.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("84", "try -1");                    int code = conn.getResponseCode();                    if (code == 200) {                        Log.d("84", "code==200");                        InputStream inputStream = conn.getInputStream();                        String abc = readInfoStream(inputStream);                        Gson gson = new Gson();                        stuList = gson.fromJson(abc, new TypeToken<List<StuManage>>() {                        }.getType());                        SharedPreferences sharedPreferences = getSharedPreferences("WebView", MODE_PRIVATE);                        SharedPreferences.Editor editor = sharedPreferences.edit();                        editor.putString("studata", abc);

//StuManage stuManage=new StuManage();                        //stuManage.setTimestamp(System.currentTimeMillis());                        //Gson gson=new Gson();

Log.d("84", "stulist 获取数据正常");                        Message message = new Message();                        message.obj = abc;                        message.what = 200;                        handler.sendMessage(message);                    } else {                        Message message = new Message();                        message.what = 2;                        handler.sendMessage(message);                        Log.d("84", "请求失败");                    }                } catch (Exception e) {                    Message message = new Message();                    message.what = 0;                    handler.sendMessage(message);                    Log.d("84", "Exception");                }            }        }.start();    }}
时间: 2024-12-23 23:23:45

PHPActivity.java的相关文章

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

Java TM 已被阻止,因为它已过时需要更新的解决方法

公司的堡垒机需要通过浏览器登陆,且该堡垒机的网站需要Java的支持,最近通过浏览器登陆之后总是提示"java TM 已被阻止,因为它已过时需要更新的解决方法"导致登陆之后不能操作, 但是操作系统中确实已经安装了比较新的JDK,安装的JDK版本是jdk-7u67-windows-i586,因为太烦人,所以决定搞清楚报错的原因,一劳永逸,彻底解决这个问题 准备工作:安装JDK,安装版本jdk-7u67-windows-i586.exe,因为机器的Eclipse还依赖64位的JDK,所以另安

Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? Java new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 1 2 3 4 5 6 7 new Thread(new

由@NotNull 注解引出的关于Java空指针的控制(转)

Java 小技巧和在java应用避免NullPonintException的最佳方法 在java应用程序中,一个NullPonintException(空指针异常)是最好解决(问题)的方法.同时,空指针也是写健壮的顺畅运行的代码的关键.“预防好过治疗”这句话也同样适用于令人不爽的NullPonintException.通过应用防御性的编码技术和在遵守多个部分之间的约定,你可以再很大程度上避免NullPointException.下面的这些java小技巧可以最小化像!=null这种检查的代码.作为

Java注解(2)-注解处理器(运行时|RetentionPolicy.RUNTIME)

如果没有用来读取注解的工具,那注解将基本没有任何作用,它也不会比注释更有用.读取注解的工具叫作注解处理器.Java提供了两种方式来处理注解:第一种是利用运行时反射机制:另一种是使用Java提供的API来处理编译期的注解. 反射机制方式的注解处理器 仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解.下面结合例子来说明这种方式的处理方法. Java中的反射API(如java.lang.Class.java.lang.reflect.Field等)都实现了接

jvm系列(一):java类的加载机制

java类的加载机制 原文:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个

Java注解(1)-注解基础

注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式.注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样.那么,注解到底可以做什么呢? 1.注解的作用. 提供用来完整地描述程序所需要的信息,如编译期校验程序信息. 生成描述符文件,或生成新类的定义. 减轻编写"样板"代码(配置文件)的负担,可以使用注解自动生成. 更加干净易读的代码. 编译期类型检查. 2.Java提供的注解 Java5内置了一些原生的注

异常笔记--java编程思想

开一个新的系列,主要记一些琐碎的重要的知识点,把书读薄才是目的...特点: 代码少,概念多... 1. 基本概念 异常是在当前环境下无法获得必要的信息来解决这个问题,所以就需要从当前环境跳出,就是抛出异常.抛出异常后发生的几件事: 1.在堆上创建异常对象. 2.当前的执行路径中止                                          3. 当前环境抛出异常对象的引用.                                         4. 异常处理机制接

Java自学序言

Java自学序言 亲爱的自己和各位读者朋友: 您们好! 这是作者本人自学Java编程开发的一系列文章,不具有一定的权威性,也算是自己一个人的学习笔记和总结,希望自己通过博客的形式将我自己的学习效率得到提高.如自学的稳重存在不足或错误的地方希望广大的博客朋友们多多指教.本人在此不胜感激! 学习Java是一件很痛苦的事儿,我自己要想不断的去挑战一下自己,把自己大学所学的Java知识能够巩固起来.不断的去改正自己开发中的不足之处.如何来学习Java?如何来更好的掌握Java开发语言?这些都是我们要不断