Здравствуйте, Guys,
Я хотел сделать чат-клиент для своего Android. Но я не могу получить никакой связи.
Ну, может быть, вы можете помочь мне немного ..
В моей MainActivity.java я называю:Проблемы с AsyncTask/Thread и networkonmainthreadexception
//connect to the server
SocketTask connection = new SocketTask(this);
connection.execute();
Мой SocketTask.java выглядит следующим образом:
package chat.client;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import android.os.AsyncTask;
public class SocketTask extends AsyncTask<Void, Void, Void>{
private Socket socket;
private DataInputStream input;
protected PrintStream output;
private MainActivity main;
private Thread thrd;
public SocketTask(MainActivity main){
this.main = main;
}
@Override
protected Void doInBackground(Void... params) {
try {
socket = new Socket("192.168.178.23", 1338);
input = new DataInputStream(socket.getInputStream());
output = new PrintStream(socket.getOutputStream());
// submittes the name of the client
output.println("Mobile");
output.flush();
thrd = new Thread(new Runnable() {
public void run() {
while (!Thread.interrupted()) {
try {
final String data = input.readLine();
if (data != null)
main.runOnUiThread(new Runnable() {
//new Runnable(){
@Override
public void run() {
if(!data.equals("")){
//main.chatHistory.append(data+"\n");
main.addText(data);
}else{
//chatHistory.append("\n");
main.addText("");
}
}
});
//};
} catch (IOException e) {
//chatHistory.append("Verbindung zum Server abgebrochen!");
main.addText("Verbindung zum Server abgebrochen!");
}
}
}
});
thrd.start();
} catch (Exception e) {
//chatHistory.append("Es konnte keine Verbindung zum Server aufgebaut werden!");
main.addText("Es konnte keine Verbindung zum Server aufgebaut werden!"+e);
}
return null;
}
}
Но когда я запускаю его я только получаю:
02-27 16: 32: 05,875: E/SensorManager (26146): нить начать
Кроме того, когда я пытаюсь вызвать "connection.doInBackground()" вместо «Conne ction.execute() "(я знаю, что это вообще не имеет смысла), я получаю« networkonmainthreadexception »- но я думал, что исправил это уже с помощью AsyncTask. Ну, я новичок в Android, но я уже много гугл, не знаю, я ли это глупость, но теперь я сдался, и поэтому зарегистрировал меня здесь. Может быть, кто-то из вас может сказать мне, что я делаю неправильно.
(Не уверен, что мне нужно опубликовать мой класс MainActivity ..)
Спасибо! :)
Редактировать: Спасибо, ребята, за все эти ответы, правильно знаю, я немного перенапряжен, просто дайте мне время, чтобы попробовать/понять все ваши советы, спасибо!
Где брошено исключение? Какой номер строки и класс? Чем больше деталей, тем лучше. – Rawkode
Если вы вызываете doInBackground напрямую, вы обходите фактическую часть с резьбой, которая обычно создается путем вызова «выполнить». Следовательно, вы просто запускаете doInBackground, как и любой другой вызов метода в потоке, который вы ему назвали, из-за чего вы получили эту ошибку. – dymmeh
Вам нужно будет опубликовать немного больше трассировки стека, чтобы узнать, что вызывает исключение. connection.execute() - это правильный путь, но, возможно, что-то другое вызывает проблему. –