数据库展示数据
来源:互联网 发布:为什么电脑软件不见了 编辑:程序博客网 时间:2024/06/07 21:02
<----布局-----> <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout> <?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="match_parent" android:orientation="horizontal" android:padding="10dp"> <ImageView android:id="@+id/image_view" android:layout_width="100dp" android:layout_height="100dp" /> <TextView android:id="@+id/text_title" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> <-----主页面-------> package com.example.a18_json_cache; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ListView; import android.widget.Toast; import com.google.gson.Gson; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class MainActivity extends AppCompatActivity { private String path = "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10"; private CacheDao cacheDao; private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.list_view); cacheDao = new CacheDao(MainActivity.this); //读取数据库中存的json字符串...根据那个路径 String json = cacheDao.getJson(path); //判断读取的字符串是否为null,,,不是空,解析设置显示,,,空,访问网络请求json数据,添加到数据库,解析展示数据 if (json != null){ //解析,,,展示 parseJson(json); }else { //访问网络,获取数据 getDataFromNet(); } } /** * 获取网络上数据 */ private void getDataFromNet() { //判断,,,有网 if (isNetworkConnected(MainActivity.this)){ AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... voids) { try { URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //设置 connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); //获取 int responseCode = connection.getResponseCode(); if (responseCode == 200){ InputStream inputStream = connection.getInputStream(); //转成json字符串 String s = streamToString(inputStream,"utf-8"); //把字符串存入数据库,,,缓存下来 cacheDao.saveJson(path,s); return s; } } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String s) { //解析展示数据 parseJson(s); } }; asyncTask.execute(); }else { Toast.makeText(MainActivity.this,"网络不可用,请检查网络",Toast.LENGTH_SHORT).show(); } } /** * 解析字符串进行展示数据 * @param json */ private void parseJson(String json) { Gson gson = new Gson(); DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class); //设置适配器 if (dataDataBean != null && dataDataBean.getNewslist() != null){ NewsAdapter newsAdapter = new NewsAdapter(MainActivity.this, dataDataBean.getNewslist()); listView.setAdapter(newsAdapter); } } private String streamToString(InputStream inputStream,String charset) { try { InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String s = null; StringBuilder builder = new StringBuilder(); while ((s = bufferedReader.readLine()) != null){ builder.append(s); } bufferedReader.close(); return builder.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 判断网络状态 * @param context * @return */ private boolean isNetworkConnected(Context context) { if (context != null) { // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理) ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); // 获取NetworkInfo对象 NetworkInfo networkInfo = manager.getActiveNetworkInfo(); //判断NetworkInfo对象是否为空 if (networkInfo != null) return networkInfo.isAvailable(); } return false; } } <----适配器----> package com.example.a18_json_cache; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.List; /** * @author Dash * @date 2017/9/19 * @description: */ public class NewsAdapter extends BaseAdapter { Context context; List<DataDataBean.NewslistBean> list; public NewsAdapter(Context context, List<DataDataBean.NewslistBean> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder holder; if (view == null){ view = View.inflate(context,R.layout.item_layout,null); holder = new ViewHolder(); holder.imageView = view.findViewById(R.id.image_view); holder.textView = view.findViewById(R.id.text_title); view.setTag(holder); }else { holder = (ViewHolder) view.getTag(); } holder.textView.setText(list.get(i).getTitle()); return view; } private class ViewHolder{ ImageView imageView; TextView textView; } } <-----建立数据库-----> package com.example.a18_json_cache; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * @author Dash * @date 2017/9/19 * @description: */ public class CacheHelper extends SQLiteOpenHelper { public CacheHelper(Context context) { super(context, "bawei.db", null, 1); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { //创建表结构,,,jsoncache,,,id,url,json(,date时间) sqLiteDatabase.execSQL("create table jsoncache(id integer primary key autoincrement,url text not null,json text not null)"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } } <---数据库 增删改-----> package com.example.a18_json_cache; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; /** * @author Dash * @date 2017/9/19 * @description: */ public class CacheDao { private CacheHelper helper; public CacheDao(Context context) { helper = new CacheHelper(context); } /** * 存一个json串 */ public void saveJson(String url,String json){ SQLiteDatabase database = helper.getWritableDatabase(); //先删除url对应的数据 database.delete("jsoncache","url=?",new String[]{url}); //再存进去 ContentValues values = new ContentValues(); values.put("url",url); values.put("json",json); database.insert("jsoncache",null,values); database.close(); } /** * 根据url路径取出存入的json字符串 */ public String getJson(String url){ SQLiteDatabase database = helper.getWritableDatabase(); Cursor cursor = database.query("jsoncache", new String[]{"json"}, "url=?", new String[]{url}, null, null, null); if (cursor.moveToNext()){ String json = cursor.getString(cursor.getColumnIndex("json")); return json; } cursor.close(); database.close(); return null; } }
阅读全文
0 0
- 数据库展示数据
- 数据库插入datetime数据的java展示
- 读取数据库数据——分页展示
- 网络请求+ListView展示数据+数据库
- 数据库订单数据读取到前端展示
- 数据展示
- 用django将数据从数据库提出并分页展示
- java.jee--jsp--jdbc链接数据库,展示数据
- django查询mysql数据 从数据库提出并分页展示
- SQLite数据库--查询数据展示到listview上的案例
- jqgrid colModel如何展示数据库为Data类型的数据
- 展示医院科室的下拉列表(连接数据库数据)
- 展示数据时和数据库中的时间匹配不上
- AsynTask异步任务+HttpURLConnection网络请求+Gson解析数据+添加到sqlite数据库展示数据
- 查询数据解析后的数据保存数据库上下拉多条目展示xlv
- Oracle数据库横向展示
- JPivot入门 展示数据
- 使用Displaytag展示数据
- 关于c++文件时error: std::ios_base::ios_base(const std::ios_base&)’是私有的错误
- oracle之PLSql语言(一)
- makefile 那些事儿
- java文件下载问题
- python 出现 SyntaxError: Non-ASCII character '\xe5' 问题
- 数据库展示数据
- JAVA程序员必看书籍
- Java总结篇系列:Java多线程(一)
- 没有模拟器是JavaScript做不到的~
- “设计应对变化”--实例讲解一个数据同步系统
- 最简android之wifi调试
- Chrome开发者工具不完全指南(一、基础功能篇)
- Lintcode127 Topological Sorting solution 题解
- php安全模式详细介绍