从文件加载数据会导致致命信号11

时间:2015-03-30 19:12:41

标签: java android file crash gson

保存数据没问题。但是在加载数据时,我收到此错误消息

A/libc﹕ Fatal signal 11 (SIGSEGV), code 1, fault addr 0xa3907e44 in tid 2407 (myapplication)

此方法使用Google GSON库保存数据。该类是适配器的一部分,每次用户按下对话框中的按钮时都会调用该类。

 public int saveListToFile(UserData data, Context context) {

            itemsData.add(data); 
            notifyItemInserted(itemsData.size()-1);

        String filename = "colors";
        File file = new File(context.getFilesDir(), filename);
        try {
            BufferedWriter buffWriter = new BufferedWriter(new FileWriter(file, true));
            Gson gson = new Gson();
            Type type = new TypeToken<List<UserData>>() {}.getType();
            String json = gson.toJson(itemsData, type);
            buffWriter.append(json);
            buffWriter.newLine();
            buffWriter.close();
        } catch (IOException e) {
            return -1;
        }
        return 0;
    }

此方法使用Google GSON库加载数据。此方法还会导致应用程序崩溃,导致错误见上文

    public int readCurrentList() {
            String filename = "colors";
            File file = new File(getFilesDir(), filename);

                try {
                    BufferedReader buffReader = new BufferedReader(new FileReader(file));
                    String line;
                    Gson gson = new Gson();
                    Type type = new TypeToken<List<UserData>>() {}.getType();
                    while ((line = buffReader.readLine()) != null) {
                        itemsData.addAll((java.util.Collection<? extends UserData>) gson.fromJson(line, type));
                    }
                    buffReader.close();
                } catch (IOException e) {
                    return -1;
            }

            return 0;
        }

1 个答案:

答案 0 :(得分:0)

我和你有同样的问题。它花了几分钟才意识到我:我要求Gson将JSON转换为抽象对象列表。因为你无法实例化那些当然不起作用的抽象类,虽然看到SIGSEGV而不是更好的例外有点令人惊讶。

UserData是抽象类吗?在这种情况下,您必须更改为使用另一个类或可能是https://stackoverflow.com/a/9106351/467650中描述的解决方案。