0

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

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."); 
      } 
    } 


} 

回答

3

你传递变量的错误范围在saveData()方法。当您应该调用实例变量data_given时,您正在调用类变量this.data_given。您尚未将任何值分配给类变量data_given(this.data_given)。所以,输出流正在工作。它只是写它所包含的内容 - 这没什么。

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

希望有帮助!

+0

哦,对不起,我从前面离开了'context.data_given'。这是有人建议我尝试的东西。哪些不起作用。我应该删除它,因为代码不适用或不适用上下文。 – EricAnthony 2013-04-21 12:37:36

+0

......对于第二个答案,我非常感谢。我只是不确定我是否错过了我应该做的事情。 – EricAnthony 2013-04-21 12:41:11

+0

好的,没问题。那么,我仍然怀疑当你试图将它写入OutputStream时'data_given'变量为空。试试这个方法:放入一些'System.out.println()'并确保每个你认为被调用的方法实际上都被调用了(在每个'System.out.println()'中放一个便条以保持跟踪哪一个正在执行)。其次,使用'System.out.println()'在您尝试将其写入输出流之前立即输出'data_given'的值。 'System.out.println()'是一个不可或缺的调试工具。 – Don 2013-04-23 04:45:56

0

代替"array_saved"使用完整的文件名以扩展名状"array_saved.txt"

+0

我会尝试,但很难理解为什么这很重要。文件是一个文件。不管名字如何。如果我追加它'.exe'不是它仍然在背景中做同样的事情吗?如果我没有放置任何应该被接受为有效的BROADEST范围的东西。 – EricAnthony 2013-04-21 12:39:18