【问题标题】:ObjectOutputStream not saving in custom classObjectOutputStream 未保存在自定义类中
【发布时间】:2013-04-14 04:43:22
【问题描述】:

我创建了自己的自定义类,但我不知道它有什么问题。更具体地说,我的问题是为 android 而不是 Java 创建一个类之间存在什么区别。我的意思是,根据 logCat 它不会抛出任何错误或任何东西。相反,它告诉我InputStream 读取正确。由于某种原因,我无法保存它。完全没有。它不会抛出错误或任何东西。它只是不保存给定的参数。有任何想法吗?我认为这是因为我错误地声明了方法saveData 的参数。

package com.eai.thepicker;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.util.Log;


public class DataHandler extends Activity {

    FileOutputStream file_out;
    FileInputStream file_in;
    ObjectOutputStream obj_out;
    ObjectInputStream obj_in;
    ArrayList<String> retrieved_data, data_out;
    private boolean switch_1;
    private String tag;
    private String default_message;
    Context context;
    ArrayList<String> data_given;

    public DataHandler(Context context_given){
        context = context_given;
    }

    @SuppressWarnings("unchecked")
    public ArrayList<String> retrieveData(){
        tag = "DataHandler";
        default_message = "Tested";

        try {
            file_in = context.openFileInput("array_saved");
            obj_in = new ObjectInputStream(file_in);
            retrieved_data = (ArrayList<String>) obj_in.readObject();
            obj_in.close();
            file_in.close();
            switch_1 = true;
            Log.d(tag, "Loaded");
            } catch (FileNotFoundException e) {
            Log.d(tag, "File Not Found Exception.");
            } catch (IOException e) {
                Log.d(tag, "IO Exception.");
            } catch (ClassNotFoundException e) {
                Log.d(tag, "Class Not Found Exception.");
            } 

        if (switch_1 == false);{
        retrieved_data = new ArrayList<String>();
        retrieved_data.add(default_message);
    }

        return retrieved_data;

    }
    public void saveData(ArrayList<String> data_given){
        try {
            file_out = context.openFileOutput("array_saved", 0);
            obj_out = new ObjectOutputStream(file_out);
            obj_out.writeObject(data_given);
            obj_out.close();
            file_out.close();
            Log.d(tag, "Loaded");
        } catch (FileNotFoundException e) {
        Log.d(tag, "File Not Found Exception.");
        } catch (IOException e) {
            Log.d(tag, "IO Exception.");
            } 
    }


}

【问题讨论】:

    标签: android fileinputstream fileoutputstream objectinputstream objectoutputstream


    【解决方案1】:

    您在 saveData() 方法中传递了错误的变量范围。当您应该调用实例变量data_given 时,您正在调用类变量this.data_given。您尚未为类变量 data_given (this.data_given) 分配任何值。因此,输出流正在工作。它只是写它包含的东西——这没什么。

    要回答您的第二个问题,在 Android 中创建类和在 Java 中创建类没有区别。 Android 是用 Java 编写的。所以,这就像是在说“弦乐器和小提琴有什么区别?”小提琴是一种弦乐器。这只是一个更专业的实现。它具有弦乐器的所有品质 - 然后是一些。 Android有点像小提琴,可以这么说。它 Java。只是一个更专业的 Java 版本(有一些小例外)。

    希望有帮助!

    【讨论】:

    • 哦,抱歉,我之前把context.data_given 留在那里了。这是有人建议我尝试的。这没有用。我应该删除它,因为无论是否给出上下文,代码都不起作用。
    • ...对于第二个答案,我非常感谢。我只是不确定我是否错过了我应该做的事情。
    • 好的,没问题。好吧,当您尝试将data_given 变量写入OutputStream 时,我仍然怀疑它是否为空。试试这个:放入一些System.out.println() 并确保您认为正在调用的每个方法实际上都在被调用(在每个System.out.println() 中放置一个简短的注释以跟踪正在执行的方法)。其次,在您尝试将其写入输出流之前,立即使用System.out.println() 打印出data_given 的值System.out.println()是必不可少的调试工具。
    • 如果这不起作用,请发布该活动中的其余代码,我会看看是否找不到您的问题。
    【解决方案2】:

    不要使用"array_saved",而是使用带有扩展名的完整文件名"array_saved.txt"

    【讨论】:

    • 我会尝试这样做,但是很难理解为什么这很重要。文件就是文件。不管叫什么名字。如果我附加它.exe 它不是还在后台做同样的事情吗?如果我没有放任何应该被接受为有效的最广泛范围的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2020-03-01
    相关资源
    最近更新 更多