我有 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/