我希望在单击按钮时打开目录中的文件列表。然后点击列表中的项目以在texteditor中打开文件。但是当我运行它时,应用程序崩溃了。我在代码上有错误的地方吗?
public class LogActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//click to view log file
Button openButton = (Button)this.findViewById(R.id.btn_opentext);
openButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
File file = new File (Environment.getExternalStorageDirectory(), "/TEST");
File[] listfiles = null;
if(file.isDirectory())
listfiles = file.listFiles();
for(int i=0;i<listfiles.length;i++)
Log.i("FileName", listfiles[i].getName());
if (!file.exists())
{
Toast.makeText(LogActivity.this, "File does not exist", Toast.LENGTH_SHORT).show();
}
else
{
setListAdapter(new ArrayAdapter<File>(LogActivity.this,
android.R.layout.simple_list_item_1, listfiles));
//tap on item on list to open file
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "text/plain");
startActivity(intent);
}
}
});
答案 0 :(得分:1)
可能你的'TEST'文件夹在sdcard上不存在,在这种情况下,file.listfiles()返回null。然后当你访问listfiles.length()时(对于'for循环')你会得到一个NullPointerException。
在'else'部分中移动使用listfiles的代码。这样,当目录不存在时,您将显示Toast消息,如果它存在,它将循环执行您的日志并创建列表视图。
您还可以使用file.mkdirs(),以便在任何情况下该目录都存在,并且在没有找到文件时它将只使用空视图。 (如果你想写入SD卡,还记得添加WRITE_EXTERNAL_STORAGE权限)