0

かなり単純です。メイン プロジェクトにBIGclassがあり、「扱いにくく」なりました。own classだから今日、私は自分の を作ってみることにcodeしましたclass。これは私の「小さな」classですData storage。このTRY/CATCHステートメントfloatingは、BIG クラスで単独で機能します。ただし、小さなクラスでは、NPE がスローされます。を作成するときに、Try/Catch システムが機能していないよう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 を渡すと、現在のnullNPEContextActivity Context

ドキュメント

于 2013-04-15T02:04:49.437 に答える