簡體   English   中英

無法將List <>保存到SD卡

[英]Can't save List<> to sd-card

以下是我將得分保存到高分時的工作。

public void save() {
    try {
        BufferedWriter fw = new BufferedWriter(new FileWriter(myDir
                + "/HIGHSCORE.txt"));
        for (Integer i : scores) {
            System.out.println(i);
            fw.write(i);
            fw.newLine();
            fw.flush();
        }
        fw.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void beforeSave() {
    List<String> stringReader = new ArrayList<String>();
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader(myDir + "/HIGHSCORE.txt"));
        String s = "";
        while ((s = br.readLine()) != null) {
            System.out.println("LINE: " + s + "\n");
            scores.add(Integer.parseInt(s));
        }
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

我有兩種方法來保存和加載數據信息,beforeSave()我在onResume()mwthod中使用,而save()我放入了onPause()。 當我調用onStop()(關閉程序)時它會崩潰,而且我確定befoeStart()不能正常工作。 我使用Scanner類,使用方法nextInt(),但它不起作用:(。當我只保存一個分數時,它工作。我究竟做錯了什么?

PS。 現在,我可以確定是否必須使用flush(),但是在eather之前它不起作用。

//丹尼爾

改變fw.write(i); to fw.write(i.toString());

理由:
當前,您的代碼將值以二進制格式保存到文件中,但以文本格式讀取它們。 您必須使用相同的格式來解決問題。 以文本格式保存使得閱讀highscores.txt變得更加容易,因此我提供了該解決方案。

這是我的測試代碼:

package com.me;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;

public class Main extends Activity
{
    private static String FILE_NAME = "HIGHSCORES.txt"; // Added this for better maintainability
    private String myDir;
    private List<Integer> scores;


    @Override public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Folder in SD card
        myDir = Environment.getExternalStorageDirectory() + "/TwoDee"; // Just a random name

        // Initialize Integer list with some values
        scores = new ArrayList<Integer>();
        scores.add(new Integer(5));
        scores.add(new Integer(9));
        scores.add(new Integer(11));

        // Make sure there's the file or our test crashes. I hope you have similar code elsewhere?
        try
        {
            File folder = new File(Environment.getExternalStorageDirectory(), "TwoDee");
            if (folder.exists() == false)
                folder.mkdirs();

            File file = new File(folder, FILE_NAME);
            if (file.exists() == false)
                file.createNewFile();
        }
        catch (Exception e)
        {
            System.out.println("Fail"); // Blunt :)
        }
    }

    @Override public void onResume()
    {
        beforeSave();
        super.onResume();
    }

    @Override public void onPause()
    {
        save();
        super.onPause();
    }

    @Override public void onStop()
    {
        super.onStop();
    }

    public void save()
    {
        Log.v("TwoDee", "save...");
        try
        {
            BufferedWriter fw = new BufferedWriter(new FileWriter(myDir + "/" + FILE_NAME));
            for (Integer i : scores)
            {
                Log.v("TwoDee", i.toString());
                fw.write(i.toString());
                fw.newLine();
                //fw.flush(); // This is not really needed.
            }
            fw.close();

        } catch (FileNotFoundException e)
        {
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        }

        Log.v("TwoDee", "...save");
    }

    public void beforeSave()
    {
        //List<String> stringReader = new ArrayList<String>(); // Not needed...
        BufferedReader br = null;
        Log.v("TwoDee", "beforeSave...");
        try
        {
            br = new BufferedReader(new FileReader(myDir + "/" + FILE_NAME));
            String s = "";
            while ((s = br.readLine()) != null)
            {
                Log.v("TwoDee", s);
                //System.out.println("LINE: " + s + "\n"); // Not needed...
                scores.add(Integer.parseInt(s));
            }
        } catch (FileNotFoundException e1)
        {
            e1.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        }

        Log.v("TwoDee", "...beforeSave");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM