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