网络数据添加数据库

来源:互联网 发布:div调用js变量 编辑:程序博客网 时间:2024/04/29 08:36

首先,,创建数据库//////////  

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();  

}  

}}