Закрытие Alert Dialog Builder при получении файла через сокет - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть функция передачи файлов с компьютера (клиент) на Android (сервер) с использованием сокетов.Открывая соединение на стороне сервера, я запускаю диалоговое окно с предупреждением, чтобы указать соединение нажатием кнопки.Теперь мне нужно, чтобы при получении файла диалоговое окно с предупреждением закрывалось автоматически.

Вот моя функция кнопки

 POButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final AlertDialog.Builder dele = new AlertDialog.Builder(getActivity());
            dele.create();
            dele.setCancelable(false);
            dele.setTitle("Waiting for File. . .");
            final Socket[] socket = new Socket[1];
            final ServerSocket[] server = new ServerSocket[1];
            final BufferedReader[] br = new BufferedReader[1];
            final PrintWriter[] pw = new PrintWriter[1];

           final String ip = getIpAddress(getContext());
           dele.setMessage("IP Address:\n" + ip);

           new Thread(new Runnable() {
               @Override
              public void run(){

                  try {
                      while(true){

                          server[0] = new ServerSocket(0);
                          server[0].close();
                          server[0] = new ServerSocket(8998);
                          socket[0] = server[0].accept();

                          Date date = new Date();
                          SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
                          String curDate = dateFormat.format(date);

                          File sdcard = Environment.getExternalStorageDirectory();
                          File myFile = new File(sdcard,"TestReceived"+curDate+".csv");

                           br[0] = new BufferedReader(new InputStreamReader(socket[0].getInputStream()));
                           pw[0] = new PrintWriter(new FileWriter(myFile));
                          try {
                              String line;
                              for (line = br[0].readLine(); line != null; line = br[0].readLine()){
                                  pw[0].println(line);
                              }
                              pw[0].flush();
                              pw[0].close();


                          }
                          catch (Exception e){
                              System.out.printf("Can't write to file. ", e);
                          }
                          finally {
                              new toastview().toast("IP Address:\n"+ ip + curDate, getActivity()).show();
                              if (socket[0] != null){
                                  br[0].close();
                                  pw[0].close();
                                  server[0].close();


                              }
                          }


                      }
                  }
                  catch (Exception e){
                      e.printStackTrace();
                  }

              }
           }).start();


            dele.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    if (socket[0] != null){
                        try {
                            br[0].close();
                            pw[0].close();
                            server[0].close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                    }
                    dialogInterface.dismiss();
                }
            });
            dele.show();


        }
    });


    return inflate;
}

Я уже попробовал эти функции, но она не работает.

 dele.dismiss();
 dele.cancel();
 dialogInterface.dismiss();

Отображается только ошибка «Символ не найден».

1 Ответ

0 голосов
/ 26 сентября 2019

dele является экземпляром AlertDialog.Builder.захватить диалог, когда вы звоните .show(), а затем закрыть его.

Прочтите это тоже

...