在安卓中写入JSON文件时出现问题。

huangapple go评论58阅读模式
英文:

Issue writing to json file in android

问题

我尝试写入一个 JSON 文件,但它就是不起作用,我没有收到任何错误消息,但文件中什么也没有改变。

以下是我的代码的相关部分:

try {
    // 方法1
    Gson gson = new Gson();
    String s = "gjsanhfhj";
    String path = this.getApplicationContext().getFilesDir().getAbsolutePath() + "/" + "test.json";

    File file = new File(path);
    file.setWritable(true);

    gson.toJson(s, new FileWriter(file));

    // 方法2
    FileOutputStream outputStream;
    outputStream = openFileOutput(path, Context.MODE_PRIVATE);
    outputStream.write(s.getBytes());
    outputStream.close();

    // 方法3
    Writer output;
    output = new BufferedWriter(new FileWriter(file));
    output.write(s);
    output.close();

    Toast.makeText(this.getApplicationContext(), "check", Toast.LENGTH_SHORT).show();

} catch (Exception e) {
    e.printStackTrace();
}

我尝试了上面的三种方法,但都没有起作用,我找不到其他解决方法。

我还尝试了以下代码:

public class PlayerData {
    private int gold;
    private int wins;
    private int losses;

    public PlayerData(){
        gold = 0;
        wins = 0;
        losses = 0;
    }

    Gson gson = new Gson();
    String path = this.getApplicationContext().getFilesDir().getAbsolutePath() + "/" + "test.json";
    File file = new File(path);
    file.setWritable(true);

    gson.toJson(new PlayerData(), new FileWriter(file));

但也没有成功。

英文:

Im trying to write into a json file and it just doesnt work, I dont get any errors but nothing changes in the file.

here is the relevant section of my code

        try {
            //method1
            Gson gson = new Gson();
            String s = "gjsanhfhj";
            String path = this.getApplicationContext().getFilesDir().getAbsolutePath() + "/" + "test.json";

            File file = new File(path);
            file.setWritable(true);

            gson.toJson(s,new FileWriter(file));

            //method2
            FileOutputStream outputStream;
            outputStream = openFileOutput(path, Context.MODE_PRIVATE);
            outputStream.write(s.getBytes());
            outputStream.close();

            //method3
            Writer output;
            output = new BufferedWriter(new FileWriter(file));
            output.write(s);
            output.close();


            Toast.makeText(this.getApplicationContext(), "check", Toast.LENGTH_SHORT).show();

        } catch (Exception e) {
            e.printStackTrace();
        }

I tried the 3 methods above, didnt work I couldnt find anything else

I tried this


public class PlayerData {
    private int gold;
    private int wins;
    private int losses;

    public PlayerData(){
        gold = 0;
        wins = 0;
        losses = 0;
    }


            Gson gson = new Gson();
            String path = this.getApplicationContext().getFilesDir().getAbsolutePath() + "/" + "test.json";
            File file = new File(path);
            file.setWritable(true);

            gson.toJson(new PlayerData(),new FileWriter(file));

didnt work

答案1

得分: 0

Gson.toJson(Obj)用于将对象转换为一个键值对的Json字符串。Gson.toJson()接受一个Java对象作为参数,而您传递的是一个字符串值,这不正确,我认为。例如,Employee类的对象可以转换为以下json。

class Employee {
    int empId;
    String name;
    String department;   
}

现在,您可以调用:

gson.toJson(new Employee(100, "abc", "xyz"), new FileWriter(file));

所以,请再次检查您的需求。

英文:

Gson.toJson(Obj) is used to convert an object into a Json-String which is a key value pair. Gson.toJson() takes a java object as an argument, whereas, you are passing a STRING value which not right, I think. For example, an object of Employee class, can be converted into json as below.

class Employee {
int empId;
String name;
String department;   

} `

Now, you can call

gson.toJson(new Employee(100, "abc", "xyz"), new FileWriter(file));

So, please check your requirement again.

答案2

得分: 0

以下是翻译好的代码部分:

尝试这个这对我有效

private class myString {
    String str;
    public myString() {
        this.str = "Testing123...";
    }
}

Gson gson = new Gson();
myString s = new myString();
File file = new File(getApplicationContext().getFilesDir(), "Test.json");

try {
    if(!file.exists())
        file.createNewFile();
    FileOutputStream fileOutputStream = new FileOutputStream(file);
    byte[] arr = gson.toJson(s).getBytes();
    fileOutputStream.write(arr);
    fileOutputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

如果您有任何其他需要,请随时告诉我。

英文:

Try this. This worked for me.

private class myString {
    String str;
    public myString() {
        this.str = "Testing123...";
    }
}

Gson gson = new Gson();
    myString s = new myString();
    File file = new File(getApplicationContext().getFilesDir(), "Test.json");

    try {
        if(!file.exists())
            file.createNewFile();
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        byte[] arr = gson.toJson(s).getBytes();
        fileOutputStream.write(arr);
        fileOutputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

huangapple
  • 本文由 发表于 2023年4月20日 08:04:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/76059630.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定