не может отображать содержимое файла в текстовом виде - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь выбрать файл в диалоговом окне предупреждения, и когда я нажимаю ОК, я должен отображать содержимое выбранного файла в текстовом представлении с помощью метода display Content (), который берет выбранный файл, читает его и отображает контент построчно, но он ничего не отображает, и я думаю, что проблема в вызове, потому что я уже использую этот метод в другом приложении, и он работает.

это код, который у меня есть, и как я вызываю displayContent ()

            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
            dialogBuilder.setTitle("Single Choice List")
                    .setSingleChoiceItems(files, 0, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            selectionID = which;
                        }
                    })
                    .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //display the content of the selected file
                            displayContent();
                            Toast.makeText(View_Records.this, "You selected " + files[selectionID], Toast.LENGTH_SHORT).show();

                        }
                    })

это код для displayContent ():

private void displayContent(){

    try {
        myFilesDirectory = new File(getFilesDir(), "MyFiles");
        String fileName = files[selectionID] + ".txt";
        File file = new File(myFilesDirectory, fileName);
        String text;
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);
        StringBuilder sb = new StringBuilder();
        while ((text = br.readLine()) != null) {
            sb.append(text).append("\n");
        }
        txtViewRecords.setText(sb.toString());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

1 Ответ

0 голосов
/ 27 мая 2020

Замените

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
            dialogBuilder.setTitle("Single Choice List")
                    .setSingleChoiceItems(files, 0, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            selectionID = which;
                        }
                    })
                    .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //display the content of the selected file
                            displayContent();
                            Toast.makeText(View_Records.this, "You selected " + files[selectionID], Toast.LENGTH_SHORT).show();

                        }
                    })

вызовом другого Activity (startActivityForResult()) на стиль dialog, где вы выберете File и вернете его путь с помощью Intent, а затем внутри onActivityResult() вы просто используете его, чтобы открыть File, а затем отобразить его содержимое внутри TextView.

В противном случае вы можете попробовать сначала использовать create() и добавить onDismissListener(). Примерно так:

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// do you things with builder
AlertDialog ad = builder.create();
ad.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialogInterface) {
                // here you open file, read content and put it inside TextView`
            }
        });
ad.show()

Я не уверен, но это должно работать с AlertDialog без создания Activity для этого.

Это для получения всех файлов из каталога :

public static ArrayList<File> listFiles(File folder) {
        if (folder.isDirectory()) {
            ArrayList<File> tempList = new ArrayList<>();
            File[] files = folder.listFiles();
            for (File inFile : files) {
                if (!inFile.isDirectory()) {
                    tempList.add(inFile);
                }
            }
            /*Collections.sort(tempList, new Comparator<File>() { //you can sort by name
                @Override
                public int compare(File file1, File file2) {
                    return file1.getName().compareTo(file2.getName());
                }
            });*/
            return tempList;
        }
        return null;
    }

А вы просто отправляете myFilesDirectory в качестве параметра. Также вы можете пропустить проверку if(!inFile.isDirectory()), если вы на 100% уверены, что все файлы являются файлами, а не каталогами, и вернуть Array. И затем вы просто получаете свой файл, используя list.get(selectionID) или array[selectionID] в зависимости от того, что вы собираетесь вернуть из метода.

Также метод не обязательно должен быть static. У меня есть static для нужд проекта.

...