2017-06-18 8 views
0

に定義された内部ストレージからデータを取得)し、SaveDataを()内部ストレージ内のデータをロードして保存するためのクラスのように:は、私はloaddataの(2つのサブクラスを定義したクラスのアンドロイド

public class LoadSaveInternalActivity extends Activity { 
public String LoadData(String filename) 
{ String read = ""; 
    try { 
     FileInputStream fis = getBaseContext().openFileInput(filename); 
     if (fis != null) { 
      BufferedReader br = new BufferedReader(new InputStreamReader(fis)); 
      read = br.readLine(); 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return read; 
} 

public void SaveData(String data, String filename) 
{ 
    try { 
     FileOutputStream outputStream = getBaseContext().openFileOutput(filename, Context.MODE_PRIVATE); 
     String text = data; 
     outputStream.write(text.getBytes()); 
     outputStream.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}} 

そして、私がしようとしています

public class Fragment1 extends Fragment { 

EditText edittxt; 
private final static String file_name = "myfile"; 
private LoadSaveInternalActivity InternalActivity;@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.frag1, container,false); 

    edittxt = (EditText) rootView.findViewById(R.id.editTxt); 

    InternalActivity = new LoadSaveInternalActivity(); 
    String readData = InternalActivity.LoadData(file_name); 
    edittxt.setText(readData); 

    return rootView; 
} 
@Override 
public void onStop() { 
    super.onStop(); 
    InternalActivity = new LoadSaveInternalActivity(); 
    InternalActivity.SaveData(edittxt.getText().toString(),file_name); 

} 

このクラスのメソッドを他のアクティビティから呼び出すことはできません。この場合、誰も私を助けることができますか?

答えて

1

は、私はそれらが方法である

クラス内の2つのサブクラスloaddataの()およびSaveDataを()を定義しています。それらはサブクラスではありません。

public class LoadSaveInternalActivity extends Activity 

ないがActivityのランダムなサブクラスを作成を行います。

InternalActivity = new LoadSaveInternalActivity(); 

は、コンストラクタを介してActivity自分自身のインスタンスを作成しないください。

修正の最も簡単なセットは次のようになります。

ステップ#1:あなたの負荷を移動し、あなたのフラグメントにメソッドを保存

ステップ#2:これらの方法でgetActivity()からgetBaseContext()の呼び出しを変更し

ステップ#3:onCreateView()onStop()を変更して、フラグメントのロードと保存のメソッドを呼び出します。

ステップ#4:削除すると、LoadSaveInternalActivityとそのすべての参照

少なくともコードはコンパイルして実行する必要があります。それはかなり悪いコードです(たとえば、メインアプリケーションスレッドでディスクI/Oを実行しているなど)。

しかし、あなたがスタックオーバーフローに関する質問を投稿するときには、将来的には

をうまくいかない、あなたの症状が何であるかを詳細を説明します。 「それはうまくいかない」というようなステートメントは、細部を問わず役に立たない。

+0

実際には、フラグメント自体ではなく、別のクラスでそれらを定義する必要があります。私は他のクラスからもアクセスする必要があるからです。私がフラグメントでそれらを定義すると、すべてが問題ありません。 – srt

+1

@srt: 'Context'をパラメータとする' static'メソッドをどこかに定義します。元のコードで 'getBaseContext()'の代わりに 'Context'を使います。あなたのフラグメントで 'getActivity()'を使って 'Context'をメソッドに渡してください。 – CommonsWare

+0

どこか新しいクラスではどういう意味ですか?このように: 静的LoadData(コンテキストc、文字列ファイル名) – srt

関連する問題