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