Witam, napisałem sobie najpierw czat socketowy w javie, później postanowiłem przepisać go na androida, wszystko działa poza tym, że gdy otrzymam wiadomość od innego użytkownika czatu to aplikacja się zawiesza i prosi o zamknięcie.
Oto część kodu:
Socket socket=null;
SocketAddress sockaddr = new InetSocketAddress(host, port);
try
{
socket = new Socket();
socket.connect(sockaddr,5000);
}
catch(Exception e)
{
panel.append("***Nie mogę się połączyć z "+host+":"+port+"\n");
}
...
InputStream inStream = socket.getInputStream();
OutputStream outStream = socket.getOutputStream();
Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream, true);
...
try
{
while(true)
{
if(in.hasNextLine())
{
String input = in.nextLine(); // Tutaj występuje crash
if(input!=null && input.length()>0)
panel.append(" "+input+"\n");
}
}
}
Linijka, w której crashuje:
String input = in.nextLine();
Proszę o podpowiedź jak to naprawić.
#edit
Proszę, oto Log:
04-15 04:32:49.058: W/dalvikvm(225): threadid=15: thread exiting with uncaught exception (group=0x4001b188)
04-15 04:32:49.069: E/AndroidRuntime(225): Uncaught handler: thread Thread-8 exiting due to uncaught exception
04-15 04:32:49.249: D/dalvikvm(225): GC freed 3113 objects / 373168 bytes in 158ms
04-15 04:32:49.249: E/AndroidRuntime(225): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
04-15 04:32:49.249: E/AndroidRuntime(225): at android.view.ViewRoot.checkThread(ViewRoot.java:2683)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.view.ViewRoot.invalidateChild(ViewRoot.java:570)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:596)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2396)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.view.View.invalidate(View.java:4945)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.widget.TextView.updateAfterEdit(TextView.java:4736)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.widget.TextView.handleTextChanged(TextView.java:6158)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6316)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:889)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.text.SpannableStringBuilder.append(SpannableStringBuilder.java:259)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.text.SpannableStringBuilder.append(SpannableStringBuilder.java:28)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.widget.TextView.append(TextView.java:2236)
04-15 04:32:49.249: E/AndroidRuntime(225): at android.widget.TextView.append(TextView.java:2223)
04-15 04:32:49.249: E/AndroidRuntime(225): at pl.net.zapalka.client.Client$1.run(Client.java:104)
04-15 04:32:49.279: I/dalvikvm(225): threadid=7: reacting to signal 3
04-15 04:32:49.369: I/dalvikvm(225): Wrote stack trace to '/data/anr/traces.txt'
04-15 0449.249: E/AndroidRuntime(225): at pl.net.zapalka.client.Client$1.run(Client.java:104)
Linijka 104 to: panel.append(" "+input+"\n");