0

我试图为我的应用程序制作文件夹浏览器,但我有错误让我退出浏览器活动。活动开始时,它显示包含所有文件夹的根文件夹,然后我可以单击其中一个文件夹,它会打开并显示其中的所有文件夹,然后,如果我单击某些内容,我也会出错变量 File[] 文件名在最后一次点击后为空。所以方法 getFileFromList(String path) 工作正常 2 次并在第 3 次崩溃。而且我在控制台中没有任何错误。我的代码有什么问题?

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fflist);        

    pathtext = (TextView) findViewById(R.id.pathtext);


    getFileFromList("/");

    registerForContextMenu(getListView());        

}

protected void onListItemClick(ListView l, View v, int position, long id) {

    Log.d(LOG_TAG, String.valueOf(position));

    String clickedItem =  neededFilenames.get(position);

    getFileFromList(clickedItem);


}

public void getFileFromList(String path) {

    Log.d(LOG_TAG, path);

    neededFilenames = new ArrayList<String>();

    File dir = new File(path);        

    File[] filenames = dir.listFiles();
    Log.d(LOG_TAG, String.valueOf(filenames));
    if (filenames != null) {
        for (int i = 0; i < filenames.length; i++) {
            if (filenames[i].isDirectory() && !filenames[i].isHidden() && filenames[i].canRead()) {

                neededFilenames.add(filenames[i].getName());
            }

        }
        Log.d(LOG_TAG, String.valueOf(neededFilenames));
    } else Toast.makeText(this, "something wrong", Toast.LENGTH_SHORT).show();

    Collections.sort(neededFilenames);
    pathtext.setText("Location: /" + path);

    FileFolderAdapter adapter = new FileFolderAdapter(this, neededFilenames);

    setListAdapter(adapter);                                                  
}
4

1 回答 1

0

实际上我发现,这个“浏览器”只在根文件夹中工作,1点击它<因为在开始时,当你只使用项目名称时,你有合法的“路径”到根目录-“/”,然后1单击您将获得“路径”变量-“/文件夹”,这仍然是文件夹的合法路径,在2单击第一个文件夹中的任何文件夹后,您只有该文件夹名称“文件夹”,没有所有路径root "/",所以如果没有来自 root 的完整路径,就不能只用名称创建新文件。不确定它是否足够理解,但也许它可以帮助某人:)

于 2013-09-25T06:49:25.197 回答