Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Trotz 2 Threads StrictModeException

Das Thema "Trotz 2 Threads StrictModeException" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 25.06.2011, 20:25   #1 (permalink)
Junior Mitglied

Modell: HTC Desire

Registriert seit: 23.07.2009
Beiträge: 32
Abgegebene Danke: 4
Erhielt 0 Danke für 0 Beiträge
TheJoe eine Nachricht über ICQ schicken
Standard Trotz 2 Threads StrictModeException

Hallo miteinander,

ich hab ein Problem mit Android 3.0 aufwärts.
Also foldende Ausgangspunkte:
Eine Activity diese steuert einen Thread über zwei Handler. Einer in der Activity und einer im Thread um miteinander kommunizieren zu können. Dies klappt wunderbar auf Android 2.3.4 (Handy). Auf Android 3.1 (Tablet) wirft er mir immer eine Exception (siehe Ende).
Meine momentane Vermutung besteht darin das er keinen eigenen Thread aufmacht bzw. darin arbeitet. Das Problem bei dieser Vermutung ist, das die ganzen Aktionen am Handy ohne freezes in der GUI ablaufen, also dennoch asyncron laufen.
Suchen bei Google führen immer dazu, dass ich beim connecten einen Thread/AsyncTask benutzen soll

Hat jemand eine Idee was ich falsch mach oder ändern muss?

Threadstart:
Code:
bridge = new Soundbridge(prefs.getString("ipaddress", ""), 5555, mainhandler);
bridge.start();
threadhandler = bridge.getHandler();
Häufiger wird die Threadklasse nicht angesprochen, nur noch über die internen Handler.

Code:
threadhandler.sendMessage(threadhandler.obtainMessage(1, params));
Exception:
Code:
FATAL EXCEPTION: main
android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077)
    at java.net.InetAddress.lookupHostByName(InetAddress.java:477)
    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:277)
    at java.net.InetAddress.getAllByName(InetAddress.java:249)
    at java.net.Socket.tryAllAddresses(Socket.java:126)
    at java.net.Socket.<init>(Socket.java:204)
    at java.net.Socket.<init>(Socket.java:171)
    at de.equivalents.Soundbridge.connect(Soundbridge.java:41)
    at de.equivalents.Soundbridge.sendBefehl(Soundbridge.java:61)
    at de.equivalents.Soundbridge.getPresets(Soundbridge.java:165)
    at de.equivalents.Soundbridge.access$2(Soundbridge.java:164)
    at de.equivalents.Soundbridge$1.handleMessage(Soundbridge.java:226)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:132)
    at android.app.ActivityThread.main(ActivityThread.java:4025)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:491)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    at dalvik.system.NativeStart.main(Native Method)
TheJoe ist offline   Mit Zitat antworten
Alt 13.09.2011, 11:05   #2 (permalink)
Neuer Benutzer

Registriert seit: 13.09.2011
Beiträge: 1
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard AW: Trotz 2 Threads StrictModeException

Hallo,

ich habe das selbe Problem hat jemand eine Lösung dazu gefunden?

Danke
VG
outbreaker1303 ist offline   Mit Zitat antworten
Alt 13.09.2011, 12:53   #3 (permalink)
Junior Mitglied

Modell: HTC Desire

Registriert seit: 23.07.2009
Beiträge: 32
Abgegebene Danke: 4
Erhielt 0 Danke für 0 Beiträge
TheJoe eine Nachricht über ICQ schicken
Idee AW: Trotz 2 Threads StrictModeException

Also Lösung nicht direkt den ich hab das Problem nicht gefunden.

Meine Klasse (Thread):

Code:
public class Soundbridge extends HandlerThread {
	private Handler mainhandler;

	public Soundbridge( Handler handler) {
		super("thread");
		mainhandler = handler;
	}
           @Override
	public void run() {
		super.run();
	}

	@Override
	public void interrupt() {
		disconnect();
		super.interrupt();
	}
	
	@Override
	protected void onLooperPrepared() {
		super.onLooperPrepared();
		threadhandler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				String[] params ;
				switch (msg.what) {
				case 1: // sendBefehl
					params = (String[]) msg.obj;
					mainhandler.sendMessage(mainhandler.obtainMessage(1, sendBefehl(params[1], params[2], Boolean.getBoolean(params[3]))));
					break;
				case 2: // getPresets
					mainhandler.sendMessage(mainhandler.obtainMessage(2, (Object[]) getPresets()));
					break;
				case 3: // getDisplaydata
					mainhandler.sendMessage(mainhandler.obtainMessage(3, getDisplaydata()));
					break;
				case 4: // connect
					params = (String[]) msg.obj;
					disconnect();
					soundbridgeip = params[1];
					soundbridgeport = Integer.getInteger(params[2],5555);
					break;
				case 5:
					quit();
				}
			};
		};
	}
}
Activity:
Code:
public class BridgeControll extends Activity {
	static Handler threadhandler;

	public BridgeControll() {
		bridge = new Soundbridge(mainhandler);
		bridge.start();
		threadhandler = bridge.threadhandler;
	}
	private Handler mainhandler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 1: // String

				break;
			case 2: // charsequenz
				CharSequence[] entries = (CharSequence[]) msg.obj;
				ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(BridgeControll.this,
						android.R.layout.simple_spinner_item, entries);
				adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
				Presetspinner.setAdapter(adapter);
				break;
			case 3: // Bitmap
				if (msg.obj != null)
					bridgeBild.setImageBitmap((Bitmap) msg.obj);
				break;
			}
		};
	};
}
In der Activity sende ich z.b.:
Code:
		String[] params = { "sendBefehl", command, befehl, output.toString() };
		threadhandler.sendMessage(threadhandler.obtainMessage(1, params));
In meiner Klasse rufe ich direkt die Funktion auf, wo mir die Werte zurückliefert.
Beim Beispiel (Klasse) Case 2 sende ich direkt wieder die Ausgabe zurück an die Acivity. Case 4 connectet nur mit den übergebenen Werten.
Die Übergabe welches Case(msg.what) benutzt wird, ist der erste Parameter von obtainMessage.
Hierbei gibt es keine Hilfe von der IDE. Wenn du ein Image von Thread an Activity sendest musst du das gesendete Objekt erst wieder richtig Konvertieren.

Ich hoffe ich konnte dir soweit helfen.
Mfg Joe
TheJoe ist offline   Mit Zitat antworten
Antwort

Stichworte
networkonmainthreadexception, strictmode, threads

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
Threads stefan.bachert Android App Entwicklung 0 08.06.2011 17:33
[how to] alte Threads quercus Anleitungen für das Sony Ericsson Xperia Arc 45 30.05.2011 12:39
Threads u. Handler jim Android App Entwicklung 2 05.05.2011 15:12
Threads ignorieren matthes77 Anregungen 2 30.12.2010 11:50




Du liest gerade: "Trotz 2 Threads StrictModeException" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.