json解析放入数据库
来源:互联网 发布:vb编程软件 编辑:程序博客网 时间:2024/05/21 07:02
布局:
1.
<?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>
2.
<?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>
代码:
MainActivity:
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;
}
}
创表类:Helper
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) {
}
}
Dao类:
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;
}
}
1.
<?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>
2.
<?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>
代码:
MainActivity:
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;
}
}
创表类:Helper
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) {
}
}
Dao类:
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
- json解析放入数据库
- 解析网络接口json串放入listview
- html放入json
- 解析JSON存到数据库
- 解析json并插入数据库
- tomcat7放入war不解析
- Redis数据库存取并解析Json数据
- GSON解析JSON保存到数据库
- PLSQL解析JSON,并保存到数据库
- ajax查询数据库,服务器传回json字符串,js解析json
- 【JSON解析】JSON解析
- dom4j解析xml并放入缓存
- json获取后台放入浏览器中的cookie值转化(eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题 )
- 将文件放入数据库,操作TBlobField
- JComboBox中放入访问数据库所得内容
- 得到数据库表名并放入数组
- 从数据库读取数据放入Spinner
- 有三种东西永远不能放入数据库
- 228. Summary Ranges
- LimeSDR实现小型FM广播台
- 67 个节省开发者时间的实用工具、库与资源(前端向)
- 使用Spring Boot开发Web项目
- 仿微信语音消息的录制和播放
- json解析放入数据库
- Java面试题全集(下)
- iOS推送pem文件的生成
- Struts2 快速入门
- 测鬼记(上)——大海(六)
- centos7部署禅道和备份
- iOS
- 数据连接池(数据源)的配置方法
- 自定义标题栏