Итак, я работаю над приложением, которое использует сокеты.Несколько строк отправляется через сокет, принимающая сторона получает их и обновляет 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 прекрасно обновляется с входящими сообщениями, но не с видом.