Android 安卓;“未找到来源”;从内存文件读取数据时

Android 安卓;“未找到来源”;从内存文件读取数据时,android,Android,我正在尝试读取内部内存文件(todoItems_file.txt)上保存的一些数据 在调试期间,虽然循环只读取文件的第二行,但它读取null,但此时无法结束循环。我有很多找不到的消息来源 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_todo); lvItems =

我正在尝试读取内部内存文件(todoItems_file.txt)上保存的一些数据

在调试期间,虽然循环只读取文件的第二行,但它读取null,但此时无法结束循环。我有很多找不到的消息来源

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_todo);

    lvItems = (ListView) findViewById(R.id.lvItems);
    items = new ArrayList<String>();
    itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
    lvItems.setAdapter(itemsAdapter);


    createDataFile();       

    File file = getFilesDir();
    String dir_path = file.getPath();
    String line = "";
    //----------------------------------------- read saved items from data file
    try {
        FileInputStream fis =new FileInputStream(dir_path + "/" + file_name); 
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br= new BufferedReader(isr); 

        while(br.readLine() != "null"){
            line = br.readLine();
            items.add(line);

        }
        br.close();
        isr.close();
        fis.close();
        //String vv = 
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
public void createDataFile(){
    try {

        FileOutputStream out = openFileOutput(file_name, Context.MODE_PRIVATE | Context.MODE_WORLD_READABLE); 
        OutputStreamWriter osw = new OutputStreamWriter(out);

        osw.append("first" + "\r\n");
        osw.append("sec" + "\r\n");

        osw.flush();
        osw.close();
        out.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_todo);
lvItems=(ListView)findViewById(R.id.lvItems);
items=newarraylist();
itemsAdapter=newarrayadapter(这是android.R.layout.simple\u list\u item\u 1,items);
lvItems.setAdapter(itemsAdapter);
createDataFile();
File=getFilesDir();
String dir_path=file.getPath();
字符串行=”;
//-----------------------------------------从数据文件中读取保存的项目
试一试{
FileInputStream fis=新的FileInputStream(目录路径+“/”+文件名);
InputStreamReader isr=新的InputStreamReader(fis);
BufferedReader br=新的BufferedReader(isr);
而(br.readLine()!=“null”){
line=br.readLine();
项目。添加(行);
}
br.close();
isr.close();
fis.close();
//字符串vv=
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
public void createDataFile(){
试一试{
FileOutputStream out=openFileOutput(文件名,Context.MODE_PRIVATE,Context.MODE_WORLD_可读);
OutputStreamWriter osw=新的OutputStreamWriter(输出);
追加(“第一个”+“\r\n”);
osw.append(“sec”+“\r\n”);
osw.flush();
osw.close();
out.close();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
这似乎是错误的:

while(br.readLine() != "null")
请尝试不使用引号:

while(br.readLine() != null)

问题:您在每次迭代中读取两行,因为每次迭代调用两次
readLine()

    while(br.readLine() != "null"){ // 1st invocation
        line = br.readLine(); // 2nd invocation
        items.add(line);
    }
解决方案:您应该在每次迭代中只调用一次
readLine()
,并将其返回值存储在字符串变量中,如下所示:

   String line;  
  // read every line, one at a time from the file into the line variable   
  while((line = br.readLine()) != null){  
     items.add(line)      
  }
替换

while(br.readLine() != "null"){
    line = br.readLine();
    items.add(line);
}
与:


但是::它仍然只读取文件的第二行,并且找不到源。您可以发布您得到的确切错误消息和堆栈跟踪吗?我在调试choreographer.class文件编辑器找不到源时打开了这些新的点击
String line;
while((line = br.readLine()) != null){
    items.add(line); 
}