0

相当简单。class我的主要项目有一个很大的,它变得“笨拙”。所以今天我决定尝试制作我的own class,所以我可以简化一些code大的class。所以这是我的“小” class,我用的Data storage。该TRY/CATCH语句floating在 BIG 类中单独起作用。不过,在小班上,它抛出了一个 NPE。当我制作own class. 关于为什么的任何想法?

file_in = openFileInput("array_saved");

由 Logcat 调用。

...这是课程:

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;


public class DataHandler extends Activity {

    FileOutputStream file_out;
    FileInputStream file_in;
    ObjectOutputStream obj_out;
    ObjectInputStream obj_in;
    ArrayList<String> retrieved_data;

    public DataHandler(){
    }

    @SuppressWarnings("unchecked")
    public ArrayList<String> retrieveData(){

        try {   
            file_in = openFileInput("array_saved");
            obj_in = new ObjectInputStream(obj_in);
            if(obj_in.available() > 0){
            retrieved_data = (ArrayList<String>) obj_in.readObject();
            }
            else{
                retrieved_data = new ArrayList<String>();
               }

            obj_in.close();
            file_in.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        return retrieved_data;

    }

    public void saveData(ArrayList<String> data_out){
        try {
            file_out = openFileOutput("array_saved", 0);
            obj_out = new ObjectOutputStream(file_out);
            obj_out.writeObject(data_out);
            obj_out.close();
            file_out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }   
    }


}
4

1 回答 1

2

我相信问题在于您正在尝试调用此方法

openFileInput()

没有给它context它需要的东西。我仍然认为您不需要extend Activity通过删除extends Activity. Activity当您在调用中需要它时创建此类的实例

DataHandler data = DataHandler (this);  // give context
data.retrieveData();

类似的东西来调用该方法。然后在类中创建一个构造函数

ublic class DataHandler extends Activity {

FileOutputStream file_out;
FileInputStream file_in;
ObjectOutputStream obj_out;
ObjectInputStream obj_in;
ArrayList<String> retrieved_data;
Context mContext;   // add Context variable

public DataHandler(Context context){
mContext = context;   assign context
}

然后在你的方法中使用

 public ArrayList<String> retrieveData(){

    try {   
        file_in = mContext.openFileInput("array_saved");
        obj_in = new ObjectInputStream(obj_in);
        if(obj_in.available() > 0){
        retrieved_data = (ArrayList<String>) obj_in.readObject();
        }
        else{
            retrieved_data = new ArrayList<String>();
            }

        obj_in.close();
        file_in.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    return retrieved_data;

}

我相信这样的事情应该会有所帮助。该方法openFileInput()期望在这一点Context上是a null,因此NPE. 将a 传递Context给类将解决此问题,因为它将具有当前Activity Context

文档

于 2013-04-15T02:04:49.437 回答