M
mitch_HD2
Fortgeschrittenes Mitglied
- 1
Hallo zusammen
Ich sende von einem Netzwerk Modul ein jede 2 sekunden per UDP einen Temperaturwert an mein Android phone.....
Dies kann es aber nicht Empfangen...
wenn ich das Paket an mein PC schicke sehe ich im Wireshark dass es ankommt.
Android spuckt mir aber ein Fehler aus.. auch schon mit Asynctask probiert und ohne...
er spring direkt in den Exception...
Hier erstmal mein Code
Also wie ihr seht soll der das Paket empfangen wenn ich auf den Button drücke..
nur eins verstehe ich nicht ganz.. Ich schicke das Paket ja jede 2 sekunden...
und ich drücke ja nicht in der selben Zeit den Button... ?!
kann mir das mal jemand erklären?
LogCat:
und hier der LogCat ohne Asynctask
Danke
Ich sende von einem Netzwerk Modul ein jede 2 sekunden per UDP einen Temperaturwert an mein Android phone.....
Dies kann es aber nicht Empfangen...
wenn ich das Paket an mein PC schicke sehe ich im Wireshark dass es ankommt.
Android spuckt mir aber ein Fehler aus.. auch schon mit Asynctask probiert und ohne...
er spring direkt in den Exception...
Hier erstmal mein Code
Code:
package mitch.bariotemp;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class BarioTemp extends Activity {
Button sync;
TextView Temptxt;
int Port = 12301;
String ip = "129.1.110.200";
byte[] message = new byte[1500];
String text;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_bario_temp, menu);
return true;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bario_temp);
sync = (Button)findViewById(R.id.Sync);
Temptxt = (TextView)findViewById(R.id.temp);
sync.setOnClickListener(syncfkt);
//new Connection().execute();
//Connect();
}
private OnClickListener syncfkt = new OnClickListener(){
public void onClick(View v) {
new Connection().execute();
//Connect();
}
};
private class Connection extends AsyncTask<Object, Object, Object> {
@Override
protected Object doInBackground(Object... arg0) {
Connect();
return null;
}
}
public void Connect(){
Temptxt.setText("test222");
try {
DatagramSocket clientsocket=new DatagramSocket(12301);
byte[] receivedata = new byte[2048];
while(true)
{
DatagramPacket recv_packet = new DatagramPacket(receivedata, receivedata.length);
Log.d("UDP", "S: Receiving...");
clientsocket.receive(recv_packet);
String rec_str = new String(message, 0, recv_packet.getLength());
Temptxt.setText(rec_str);
Log.d(" Received String ",rec_str);
InetAddress ipaddress = recv_packet.getAddress();
int port = recv_packet.getPort();
Log.d("IPAddress : ",ipaddress.toString());
Log.d(" Port : ",Integer.toString(port));
}
} catch (Exception e) {
Log.e("UDP", "S: Error", e);
}
/*
try {
InetAddress serverAddr = InetAddress.getByName(ip); //die IP vom editttext wird in einer Internetadresse umgewandelt
DatagramPacket p = new DatagramPacket(message, message.length);
DatagramSocket s = new DatagramSocket(Port);
s.receive(p);
text = new String(message, 0, p.getLength());
//text = "test";
Temptxt.setText(text);
Log.d("Udp tutorial","message:" + text);
s.close();
}
catch (Exception e)
{
Log.d("Udp tutorial","test " + text);
AlertDialog.Builder alert = new AlertDialog.Builder(this);//alert ausgeben show nicht vergessen;)
alert.setTitle("Fehler");// überschrift des buttons
alert.setMessage("Verbindungsfehler");//Text des Buttons
alert.setPositiveButton("OK", null);//Position des OK Buttons
alert.show();//zeigt alert an
} */
}
}
Also wie ihr seht soll der das Paket empfangen wenn ich auf den Button drücke..
nur eins verstehe ich nicht ganz.. Ich schicke das Paket ja jede 2 sekunden...
und ich drücke ja nicht in der selben Zeit den Button... ?!
kann mir das mal jemand erklären?
LogCat:
Code:
11-26 13:48:10.285: D/OpenGLRenderer(5266): Enabling debug mode 0
11-26 13:48:13.410: W/dalvikvm(5266): threadid=11: thread exiting with uncaught exception (group=0x40fe62a0)
11-26 13:48:13.430: E/AndroidRuntime(5266): FATAL EXCEPTION: AsyncTask #1
11-26 13:48:13.430: E/AndroidRuntime(5266): java.lang.RuntimeException: An error occured while executing doInBackground()
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.os.AsyncTask$3.done(AsyncTask.java:299)
11-26 13:48:13.430: E/AndroidRuntime(5266): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
11-26 13:48:13.430: E/AndroidRuntime(5266): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
11-26 13:48:13.430: E/AndroidRuntime(5266): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
11-26 13:48:13.430: E/AndroidRuntime(5266): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-26 13:48:13.430: E/AndroidRuntime(5266): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-26 13:48:13.430: E/AndroidRuntime(5266): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-26 13:48:13.430: E/AndroidRuntime(5266): at java.lang.Thread.run(Thread.java:856)
11-26 13:48:13.430: E/AndroidRuntime(5266): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4865)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:947)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.view.View.requestLayout(View.java:15430)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.view.View.requestLayout(View.java:15430)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.view.View.requestLayout(View.java:15430)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.view.View.requestLayout(View.java:15430)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:292)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.view.View.requestLayout(View.java:15430)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.widget.TextView.checkForRelayout(TextView.java:6611)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.widget.TextView.setText(TextView.java:3705)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.widget.TextView.setText(TextView.java:3563)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.widget.TextView.setText(TextView.java:3538)
11-26 13:48:13.430: E/AndroidRuntime(5266): at mitch.bariotemp.BarioTemp.Connect(BarioTemp.java:83)
11-26 13:48:13.430: E/AndroidRuntime(5266): at mitch.bariotemp.BarioTemp$Connection.doInBackground(BarioTemp.java:75)
11-26 13:48:13.430: E/AndroidRuntime(5266): at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-26 13:48:13.430: E/AndroidRuntime(5266): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-26 13:48:13.430: E/AndroidRuntime(5266): ... 5 more
und hier der LogCat ohne Asynctask
Code:
11-26 13:50:26.330: E/UDP(6594): S: Error
11-26 13:50:26.330: E/UDP(6594): java.lang.IllegalArgumentException: Port out of range: 123012
11-26 13:50:26.330: E/UDP(6594): at java.net.DatagramSocket.checkPort(DatagramSocket.java:100)
11-26 13:50:26.330: E/UDP(6594): at java.net.DatagramSocket.<init>(DatagramSocket.java:77)
11-26 13:50:26.330: E/UDP(6594): at mitch.bariotemp.BarioTemp.Connect(BarioTemp.java:86)
11-26 13:50:26.330: E/UDP(6594): at mitch.bariotemp.BarioTemp$1.onClick(BarioTemp.java:63)
11-26 13:50:26.330: E/UDP(6594): at android.view.View.performClick(View.java:4211)
11-26 13:50:26.330: E/UDP(6594): at android.view.View$PerformClick.run(View.java:17267)
11-26 13:50:26.330: E/UDP(6594): at android.os.Handler.handleCallback(Handler.java:615)
11-26 13:50:26.330: E/UDP(6594): at android.os.Handler.dispatchMessage(Handler.java:92)
11-26 13:50:26.330: E/UDP(6594): at android.os.Looper.loop(Looper.java:137)
11-26 13:50:26.330: E/UDP(6594): at android.app.ActivityThread.main(ActivityThread.java:4898)
11-26 13:50:26.330: E/UDP(6594): at java.lang.reflect.Method.invokeNative(Native Method)
11-26 13:50:26.330: E/UDP(6594): at java.lang.reflect.Method.invoke(Method.java:511)
11-26 13:50:26.330: E/UDP(6594): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
11-26 13:50:26.330: E/UDP(6594): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
11-26 13:50:26.330: E/UDP(6594): at dalvik.system.NativeStart.main(Native Method)
Danke