Java 列表活动崩溃

Java 列表活动崩溃,java,android,Java,Android,我希望在单击按钮时打开目录中的文件列表。然后点击列表中的一项,在文本编辑器中打开该文件。但当我运行应用程序时,它崩溃了。我的密码有错误吗 public class LogActivity extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(sav

我希望在单击按钮时打开目录中的文件列表。然后点击列表中的一项,在文本编辑器中打开该文件。但当我运行应用程序时,它崩溃了。我的密码有错误吗

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);
        }  

      }
    });
公共类LogActivity扩展了ListActivity{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//单击以查看日志文件
按钮openButton=(按钮)this.findViewById(R.id.btn\u opentext);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
File File=新文件(Environment.getExternalStorageDirectory(),“/TEST”);
File[]listfiles=null;
if(file.isDirectory())
listfiles=file.listfiles();

对于(int i=0;iSD卡上可能不存在您的“TEST”文件夹,在这种情况下,file.listfiles()返回null。然后当您访问listfiles.length()(对于“for循环”)时,您会得到一个NullPointerException

移动“else”部分中使用listfiles的代码。这样,当目录不存在时,您将显示Toast消息,如果它存在,它将循环执行日志并创建列表视图


您还可以使用file.mkdirs(),这样在任何情况下,该目录都将存在,并且当找不到任何文件时,它将只使用空视图。(如果您希望写入sd卡,请记住添加“写入外部存储”权限)

如果“测试”不存在或“测试”,您将获得什么异常不是目录-您将在for循环中出现NullPointerException,因为listfiles=file.listfiles();永远不会发生。您不发布错误日志吗?03-13 17:48:30.345:E/AndroidRuntime(32632):原因:java.lang.RuntimeException:您的内容必须具有id属性为“android.R.id.list”的ListView修复此问题`