新手--网络访问的json数据存储在本地文件夹, 离线使用

本文介绍了一种在Android应用中实现网络数据下载及本地缓存的方法。通过创建专用工具类DownLoadUtil,实现了从网络获取JSON数据并将其保存至本地文件的功能。该方法减少了MainActivity中的代码负担,提升了应用的性能。
摘要由CSDN通过智能技术生成

这里写了一个Demo, 因为看之前的同事写的代码, 在MainActivity中太多,因此抽出了一个专门处理下载的util

具体代码如下(因为我写的很多变量需要在其他类中访问,这里直接使用 public static 来定义的,减少麻烦, 此外,因为我是用的是webservice来获取服务器数据,因此还删除了我的一些其他的内容,免得代码看起来太杂,虽然只多了十几行)

这里因为删除了一些内容,可能会有些错误导包之类的,大家可以按照自己的需要修改!  代码中的json数据并没写,需要自己下载才能正常运行显示.

package com.ontime.netdemo.activity;
import org.ksoap2.SoapEnvelope;
import android.content.Context;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.widget.TextView;import com.google.gson.Gson;import com.ontime.netdemo.R;import com.ontime.netdemo.bean.JsonResult;import com.ontime.netdemo.utils.DownLoadUtil;import com.ontime.netdemo.utils.MyApplication;public class MainActivity extends AppCompatActivity { public static TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); DownLoadUtil.downloadFromNet(); //从网络上下载数据到本地,之后直接使用本地数据 tv.setText(DownLoadUtil.loadJsonDatafromLocal(MyApplication.getContext())); } }


package com.ontime.netdemo.utils;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;
import com.ontime.netdemo.activity.MainActivity;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

public class DownLoadUtil {
    public static String jsonData;  //从网络获取到的json字符串,这里我就不写获取过程了
    private static BufferedWriter bw = null;
    private static BufferedReader br = null;
    private static File cacheFile;  //存在本地的文件夹

    //json数据保存本地文件夹中
    public static void storeJsonData(Context context, String jsonData) {
        try {
            cacheFile = new File(context.getFilesDir(), "jsonData");
            bw = new BufferedWriter(new FileWriter(cacheFile));
            bw.newLine();
            bw.write(jsonData);
            Log.e("storeJson", "保存数据到本地文件夹中:" + cacheFile);
            bw.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            bw = null;
        }
    }

    //从本地加载数据
    public static String loadJsonDatafromLocal(Context context) {
        cacheFile = new File(context.getFilesDir(), "jsonData");
        StringBuffer stringBuffer = new StringBuffer();
        if (cacheFile.exists()) {
            try {
                br = new BufferedReader(new FileReader(cacheFile));
                while (br.ready()) {
                    stringBuffer.append(br.readLine().trim().toString());
                }
                br.close();
                Log.d("loadJsonDatafromLocal", stringBuffer.toString());
                return stringBuffer.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            Toast.makeText(MyApplication.getContext(),"读取的文件不存在",Toast.LENGTH_SHORT).show();
        }
        return null;
    }



    public static void downloadFromNet() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //这里是从网络获取json数据的
                    //调用下载数据的方法,将json字符串作为实参
                        DownLoadUtil.storeJsonData(MyApplication.getContext(), jsonData);
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.d("Exception", e.toString());
                }
            }
        }).start();
    }
}

xml文件如下,为了简单,demo中只写了一个可以滑动的 textview, 将本地文件夹中的数据显示

<?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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.ontime.netdemo.activity.MainActivity"
    >

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

        <TextView
            android:id="@+id/tv"
            android:textSize="20sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </ScrollView>
</RelativeLayout>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值