java - ANDROID STUDIO 本地 json 文件在更改 Activity 时重置

标签 java android json

我有 2 个 Activity ,在第二个 Activity 中,我阅读并对本地 JSON 文件进行了一些更改,它适用于我需要的所有内容,但是当我转到 mainActivity 然后返回到第二个 Activity 时,该文件似乎只是重置,看起来我没有应用任何更改。我不知道该怎么办...

我希望这里能做点什么......

这是第二个 Activity 的代码:

package com.example.plasticopedia;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

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

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

public class calculator extends AppCompatActivity {

    int buttonClicked = MainActivity.buttonClicked;
    Button plus;
    Button minus;

    public int amountTrash;

    /public boolean openingActivity = true;
    public boolean clickedPlus = true;/

    public int clickedPlus;

    String firstParagraph;
    String secondParagraph;
    String thirdParagraph;
    String fourthParagraph;
    String fifthParagraph;

    String[] nameArray = {"BAG", "BOTTLE", "STRAW", "DETERGENT_CONTAINER", "BOTTLE_CAP", "FOOD_CONTAINER", "CUTLERY", "CRISPS_PACKET"};
    String[] titleArray = {"Plastic Bag", "Water Bottle", "Straw", "Detergent Container", "Bottle Cap", "Food Container", "Cutlery", "Crisps Packet"};


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

        getJSON();
        changeImageTitleText();

        plus = findViewById(R.id.plus);
        minus = findViewById(R.id.minus);

        plus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                clickedPlus = 1;
                getJSON();
                clickedPlus = 0;
            }
        });

        minus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                clickedPlus = 2;
                getJSON();
                clickedPlus = 0;
            }
        });
    }
public void changeImageTitleText(){
        TextView title = findViewById(R.id.title);
        TextView P1 = findViewById(R.id.firstParagraph);
        TextView P2 = findViewById(R.id.secondParagraph);
        TextView P3 = findViewById(R.id.thirdParagraph);
        TextView P4 = findViewById(R.id.fourthParagraph);
        TextView P5 = findViewById(R.id.fifthParagraph);

        for(int i = 0; i < titleArray.length; i++){
            if(buttonClicked == i){
                title.setText(titleArray[i]);
                P1.setText(firstParagraph);
                P2.setText(secondParagraph);
                P3.setText(thirdParagraph);
                P4.setText(fourthParagraph);
                P5.setText(fifthParagraph);
                changeImage(i);
            }
        }
    }


    private void changeImage(int i){
        Button image = findViewById(R.id.image);
        if(i == 0){
            image.setBackgroundResource(R.drawable.button_plastic_bag);
        } else if (i == 1){
            image.setBackgroundResource(R.drawable.button_plastic_bottle);
        } else if (i == 2){
            image.setBackgroundResource(R.drawable.button_plastic_straw);
        } else if (i == 3){
            image.setBackgroundResource(R.drawable.button_plastic_detergent_container);
        } else if (i == 4){
            image.setBackgroundResource(R.drawable.button_plastic_bottle_cap);
        } else if (i == 5){
            image.setBackgroundResource(R.drawable.button_plastic_food_container);
        } else if (i == 6){
            image.setBackgroundResource(R.drawable.button_plastic_cutlery);
        } else if (i == 7){
            image.setBackgroundResource(R.drawable.button_plastic_crisps_packet);
        }
    }
public void getJSON(){
        String json;
        try{
            InputStream is = getAssets().open("plastic.json");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();

            json = new String(buffer, "UTF-8");
            JSONArray jsonArray = new JSONArray(json);

            if(clickedPlus == 0) {
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject obj = jsonArray.getJSONObject(i);
                    for (int j = 0; j < nameArray.length; j++) {
                        if (buttonClicked == j) {
                            if (obj.getString("name").equals(nameArray[j])) {
                                Log.e("TrashOpening", "" + amountTrash);
                                //((JSONObject)jsonArray.get(i)).put("amountTrash", "20");
                                TextView tv = findViewById(R.id.number);
                                tv.setText(obj.getString("amountTrash"));
                                Log.e("TrashOpeningSecond", "" + amountTrash);
                                firstParagraph = obj.getString("1");
                                secondParagraph = obj.getString("2");
                                thirdParagraph = obj.getString("3");
                                fourthParagraph = obj.getString("4");
                                fifthParagraph = obj.getString("5");
                            }
                        }
                    }
                }
            }
if(clickedPlus == 1){
                //changing the values
                for(int i = 0; i < jsonArray.length(); i++){
                    JSONObject obj = jsonArray.getJSONObject(i);
                    for(int j = 0; j < nameArray.length; j++){
                        if(buttonClicked == j){
                            if(obj.getString("name").equals(nameArray[j])){
                                amountTrash ++;
                                Log.e("TrashClickedPlus", "" + amountTrash);
                                ((JSONObject)jsonArray.get(i)).put("amountTrash", "" + amountTrash);
                                TextView tv = findViewById(R.id.number);
                                tv.setText(obj.getString("amountTrash"));
                                Log.e("TrashAfterChangingJSON", "" + Integer.parseInt(obj.getString("amountTrash")));
                            }
                        }
                    }
                }
            }else if(clickedPlus == 2){
                for(int i = 0; i < jsonArray.length(); i++){
                    JSONObject obj = jsonArray.getJSONObject(i);
                    for(int j = 0; j < nameArray.length; j++){
                        if(buttonClicked == j){
                            if(obj.getString("name").equals(nameArray[j])){
                                if(amountTrash > 0){
                                    amountTrash --;
                                    ((JSONObject)jsonArray.get(i)).put("amountTrash", "" + amountTrash);
                                    TextView tv = findViewById(R.id.number);
                                    tv.setText(obj.getString("amountTrash"));
                                }
                            }
                        }
                    }
                }
            }
        }catch(IOException e){
            e.printStackTrace();
        }catch(JSONException e){
            e.printStackTrace();
        }
    }

}

最佳答案

使用共享首选项或本地数据库完成的 Assets 是只读的

关于java - ANDROID STUDIO 本地 json 文件在更改 Activity 时重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59432903/

相关文章:

javascript - 我有一个 JavaScript 参数,它引用一个对象。如何将引用的对象更改为字符串,而不是更改我的局部变量?

php - Laravel 集合 - 扁平化不起作用

java - 如何找出我局域网中主机的 IPv6 地址(按名称)

java - 将bean数据从servlet传递到jsp时出现问题

Java 8 Optionals,组合语句

c# - 带有 Facebook 身份验证的 Xamarin.Droid Firebase

android - 如何从 ListView 中的所有 EditText 中检索值

java - 遍历列表并删除不起作用

android - AsyncHttpClient:传递的 contentType 会被忽略,因为 HttpEntity 设置了内容类型

javascript - Json 排序不起作用