RecyclerView не будет обновляться после перезапуска / сбоя - PullRequest
0 голосов
/ 23 сентября 2019

Итак, я работаю над приложением, которое использует сокеты.Несколько строк отправляется через сокет, принимающая сторона получает их и обновляет RecyclerView соответственно.Работает нормально, пока приложение не вылетает / не перезагружается.Я не знаю, что происходит, но в Play Store есть приложение под названием XRecorder, и каждый раз, когда я использую функцию скриншота, мое приложение перезагружается.Теперь, когда я отправляю сообщение через сокет, он получает сообщение, но не обновляет RecyclerView?Появляется Toast, поэтому я знаю, что оно получено.И он также обновляется, когда я звоню removeItem()

Вот мой код:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    serverAsync.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}

private class ServerAsync extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... voids) {
            try {
                serverSocket = new ServerSocket(serverPort);
                while (true) {
                    Socket client = serverSocket.accept();
                    isConnected = client.isConnected();

                    if (isConnected) {
                       try {
                           handler.post(new Runnable() {
                               @Override
                               public void run() {
                                   updateStatusUI();
                               }
                           });

                           Entry entry = new Entry();
                           String inputLine;
                           BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                           while ((inputLine = in.readLine()) != null) {
                               StringBuilder sb = new StringBuilder();
                               String message = inputLine;
                               sb.append(message);
                               entry.add(sb.toString());
                           }

                           //READ NEW ENTRIES
                           handler.post(new Runnable() {
                               @Override
                               public void run() {
                                   splitOrder(entry);
                                   saveArrayList();
                               }
                           });

                           in.close();
                           handler.post(new Runnable() {
                               @Override
                               public void run() {
                                   entryAdapter.notifyDataSetChanged();
                                   Toast.makeText(getApplicationContext(), "In has closed :" + client.getRemoteSocketAddress(), Toast.LENGTH_SHORT).show();
                                   updateStatusUI();
                               }
                           });

                       } catch (Exception e) {
                            Log.e("TEST", e.getMessage(), e);
                       }
                    } else {
                        Toast.makeText(getApplicationContext(), "Client :" + client.getRemoteSocketAddress()+" has DISCONNECTED", Toast.LENGTH_SHORT).show();
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                updateStatusUI();
                            }
                        });
                    }
                }

            } catch (Exception e) {
                Log.e("UHE", e.getMessage(), e);

            }
            return null;
        }
    }

public void removeItem(int position) {
     entryAdapter.notifyDataSetChanged();
}

Я попытался сбросить адаптер для RecyclerView, но он просто не работал,Я также заметил, что каждый раз, когда приложение вылетает и перезапускается, я получаю java.net.BindException: bind failed: EADDRINUSE (Address already in use)

, указывающий на создание моего serverSocket (serverSocket = new ServerSocket(serverPort)

Может ли это быть причиной того, что RecyclerView выигралобновлять?ArrayList прекрасно обновляется с входящими сообщениями, но не с видом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...