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;
    }
}
原创粉丝点击