首页 > 解决方案 > 如何在 SharedPreferences 中存储来自 url 的 JSONObject

问题描述

我已经从 JSON Url 解析并获取数据。数据是关于未来五天的降雨量。我想将数据存储在 SharedPreferences 中,因此未来五天将成为过去五天,JSON Url 将为未来五天提供新数据。所以我想要一个具有 10 个值的 SharedPreferences 可以删除超过 10 天的数据,最终这些数据将显示在图表中。

我试图弄清楚如何在 SharedPreferences 中存储 JSONObject,但到目前为止还没有运气。我对 Java 和一般的编码都很陌生,所以我很想得到你的帮助。我有两个活动。MainActivity 和 fetchData 活动是从 JSON Url 发生的解析和获取。我应该如何将 SharedPreferences 添加到此代码中?

主要活动

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private ImageButton adviser;
    private ImageButton location;
    Button click;
    public static TextView data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        click = (Button) findViewById(R.id.button);
        adviser = (ImageButton) findViewById(R.id.imagebutton);
        location= (ImageButton) findViewById(R.id.imageButtonLocation);
        data = (TextView) findViewById(R.id.fetcheddata);



        click.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                fetchData process = new fetchData();
                process.execute();

            }
        });

fetchData 活动

import android.os.AsyncTask;
import android.util.Log;
import android.widget.TextView;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class fetchData extends AsyncTask<Void,Void,Void> {
    String data = "";
    private TextView setText;


    @Override
    protected Void doInBackground(Void... voids) {
        StringBuilder builder = null;

        try {
            URL url = new URL("https://data.buienradar.nl/2.0/feed/json");
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String line = "";
            builder = new StringBuilder();
            while ((line = bufferedReader.readLine()) != null) {
                builder.append(line);
                data = data + line;

            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);

        StringBuilder stringBuilder = new StringBuilder();


        try {
            JSONObject jsonData = new JSONObject(data);
            JSONObject forecast = jsonData.getJSONObject("forecast");
            //JSONObject fivedayforecast = forecast.getJSONObject("fivedayforecast");
            JSONArray fivedayforecast = forecast.getJSONArray("fivedayforecast");

            for (int i = 0; i < fivedayforecast.length(); i++) {
                JSONObject object = fivedayforecast.getJSONObject(i);
                //mmRainMin[i] = Integer.parseInt(object.getString("mmRainMin"));
                String datum = object.getString("day");
                String mmRainMin = object.getString("mmRainMin"); //opslaan in shared preferences, makkelijk parameter maken of locale file met max 10 waarden

                stringBuilder.append("The amount of rain on " + datum + " is " + mmRainMin + " mm" + "\n");
                MainActivity.data.setText(stringBuilder.toString()); //changed textView to data, data.setText(stringBuilder.toString());

                Log.e("mmRainMin", mmRainMin);


            }
        } catch (JSONException e) {
            e.printStackTrace();
            //Log.e("", e.getMessage());
        }
    }

}

标签: javajsonurlsharedpreferences

解决方案


推荐阅读