首先,,创建数据库//
db.execSQL("create table news(id integer primary key autoincrement,url text not null,jsonstr text not null)");
//创建dao包
public class UserDao {
private final SQLiteDatabase db;
public UserDao(Context context) {
MyHerlper herlper = new MyHerlper(context);
db = herlper.getWritableDatabase();
}
public void insert(String url,String jsonstr){
ContentValues values=new ContentValues();
values.put("url",url);
values.put("jsonstr",jsonstr);
db.insert("news",null,values);
}
//根据url去查询数据-只会得到一条记录
public String queryData(String url){
String data="";
Cursor cursor=db.query("news",null," url=?",new String[]{url},null,null,null);
while (cursor.moveToNext()){
data= cursor.getString(cursor.getColumnIndex("jsonstr"));
}
return data;
}}
//在acvity里面调取添加查询方法
public class MainActivity extends AppCompatActivity {
List<NewsResult.DataBean> list=new ArrayList<>();
private XListView xlv;
private int pageIndex=1;
private int type=1;
private String url="http://ic.snssdk.com/2/article/v25/stream/?category=news_tech&count=20&bd_latitude=4.9E-324&bd_longitude=4.9E-324&bd_loc_time=1457695555&loc_mode=5&lac=4527&cid=28883&iid=3835029558&device_id=12211880440&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=iToolsAVM&os_api="+pageIndex;
private Handler handler =new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (type==1){
xlv.stopRefresh();
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat format=new SimpleDateFormat("yyyy_MM_dd HH:mm:ss");
String s = format.format(date);
xlv.setRefreshTime(s);
}
if (type==2){
xlv.stopLoadMore();
}
}
};
private MyAdapter adapter;
private UserDao dao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xlv = (XListView) findViewById(R.id.xlv);
xlv.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
type=1;
pageIndex=1;
initData();
}
@Override
public void onLoadMore() {
type=2;
pageIndex++;
initData();
}
});
initData();
//1.根据url先从数据库中查询数据,有数据则,显示,无数据,则从网络获取
dao = new UserDao(this);
String data = dao.queryData(url);
if (!"".equals(data)){
Gson gson=new Gson();
NewsResult
result = gson.fromJson(data, NewsResult.class);
list.addAll(result.getData());
setMyAdapter();
}else {
initData();
} }
public void initData(){
//首先判断有没有连接网络
boolean result= TypeUtils.isConn(this);
if(result){
//进行数据请求
class MyTask extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection)
url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(2000);
connection.setConnectTimeout(2000);
if (connection.getResponseCode()==200){
InputStream stream = connection.getInputStream();
String s = StreamToString.StreamTostr(stream);
return s;
} } catch (IOException e) {
e.printStackTrace();
} return null;
} @Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//添加到数据库
dao.insert(url,s);
Gson gson=new Gson();
NewsResult result = gson.fromJson(s, NewsResult.class);
if (type==1){
list.clear();
list.addAll(result.getData());
}else {
list.addAll(result.getData());
}
setMyAdapter();
handler.sendEmptyMessageDelayed(1,1000);
}
}
new MyTask().execute(url);
}else{
handler.sendEmptyMessageDelayed(0,1000);
TypeUtils.openNetSettingDg(MainActivity.this);
//Toast.makeText(MainActivity.this,"无网络",Toast.LENGTH_SHORT).show(); }}
public void setMyAdapter(){
if (adapter==null ){
adapter = new MyAdapter(this,list);
xlv.setAdapter(adapter);
}else {
adapter.notifyDataSetChanged();
}
}}