0

内部ストレージのファイルの新しい行に各整数を保存して、アプリケーションに整数のリストを保存しようとしています。それを取得するために、私はそれを行ごとに読み取り、整数として解析されたすべての行の値を整数のリストに入れました。この種のものにはデータベースの方が適していることは知っていますが、これは機能するはずです。

私はかなり長い間試していますが、うまくいかないようです。読み込もうとすると、常に nullpointerexception が発生します。「行」をログに記録すると、必要な値が得られました。しかし

1 つの ID を保存し、それを新しい文字列として追加します。

private void saveToFavorites(Integer saveFav) {
            String favstr = String.valueOf(saveFav);
            BufferedWriter writer = null;
            try {
              writer = new BufferedWriter(new OutputStreamWriter(openFileOutput("favorites", MODE_WORLD_WRITEABLE)));
              writer.newLine();
              writer.append((favstr));
              System.out.println(" added to favs :"+ saveFav);
            } catch (Exception e) {
                    e.printStackTrace();
            } finally {
              if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
              }
            }
        } 

そして読み取り方法:

  @SuppressWarnings("null")
    private List<Integer> readFileFromInternalStorage() {
            List<Integer> favs = null;
            BufferedReader input = null;
            try {
              input = new BufferedReader(new InputStreamReader(openFileInput("favorites")));
              String line;
              while ((line = input.readLine()) != null) {
                  System.out.println("readFileFromInternalStorage line value: "+ line );
                 favs.add(Integer.parseInt(line));
              }
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("readFileFromInternalStorage: fail" );
            } finally {
            if (input != null) {
              try {
                input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
              }
            }
            return favs;
        }  

これは他のアクティビティにあります。うまくいくと思っていましたが、明らかにうまくいきません。読み返すと、ログライン: System.out.println("readFileFromInternalStorage line value: "+ line ); line の値が最後に追加された id と等しいこと、および空の行が表示されますが、他の行もそうではありません。したがって、行ごとの保存は失敗します。また、それを整数に解析するときに失敗します。これは単なる数値であるため、奇妙なことです。

08-01 12:29:54.190: I/System.out(1540): readFileFromInternalStorage line value: 
08-01 12:29:54.190: I/System.out(1540): readFileFromInternalStorage line value: 301

誰が私が何を変更する必要があるか知っていますか?

4

4 に答える 4

3

以来、Integer全体Serializableをシリアル化することをお勧めしますList:

private void saveList(List<Integer> list) {
try {
            File file = Environment.getExternalStorageDirectory();
            File filename = new File(file, "yourfilename");
            fos = new FileOutputStream(filename);
            out = new ObjectOutputStream(fos);
            out.writeObject(list);
            out.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
}

private void readList()
{


    try {
                File file = Environment.getExternalStorageDirectory();
                File filename = new File(file, "yourfilename");
                fis = new FileInputStream(filename);
                in = new ObjectInputStream(fis);
                List<Integer> list= (List<Integer>) in.readObject();
                in.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            } catch (ClassNotFoundException ex) {
                ex.printStackTrace();
            }

}
于 2012-08-01T10:47:25.497 に答える
1

これを試してみてください:- 1 - String saveFav = contaai​​ns all integer this form I1+"/"I2+"/"I3;

2:- 次に、ファイルに保存します

     private void saveToFavorites(String saveFav) { 
       //right here your code for write into file saveFave string
 }  

ファイル読み取り文字列と分割( "/")の読み取りでは、それは私にとってはうまくいきます。

于 2012-08-01T11:40:00.570 に答える
0

整数リストを割り当てていません...

List<Integer> favs = null;

新しい配列リストを割り当てます。

List<Integer> favs = new ArrayList<Integer>();
于 2012-08-01T10:50:17.107 に答える
0

これは、電話の内部メモリに対して int を読み書きする作業コードです。int の配列またはリストを作成し、基本的にすべての int がメモリに保存/メモリから読み取られるまで反復することができます。

int をメモリに書き込むコードは次のとおりです。

public void writePrimitiveInternalMemory(String filename, int value) {
        SharedPreferences preferences = this.getPreferences(Activity.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putInt(filename, value);
        editor.commit();

    }

メモリから読み取るコードは次のとおりです。

public int readPrimitiveInternalMemoryInteger(String filename) {
        SharedPreferences preferences = this.getPreferences(Activity.MODE_PRIVATE);
        return preferences.getInt(filename, 0);

    }

これがお役に立てば幸いです。

于 2012-08-01T10:46:09.667 に答える