Android Android Google API

undertaker

Mitglied
Hallo zusammen,

habe ein (hoffentlich) kleines Problem mit der Google API. Und zwar würde ich gerne die Route von Punkt A nach Punkt B einzeichnen, was nach meiner Recherche auch machbar ist. Leider gibt es nur wenig Beispiele dazu die mir weiterhelfen also frage ich hier mal nach:

Mein Code basiert auf diesem Tutorial und sieht auch ganz gut aus, nur bekomme ich eine exception bei der HTTP-Verbindung. Hier mal der relevante Teil:

Java:
HttpURLConnection urlConnection = null;
		URL url = null;
		try {
			url = new URL(urlString.toString());
			urlConnection = (HttpURLConnection) url.openConnection(); 
			urlConnection.setRequestMethod("GET");
			urlConnection.setDoOutput(true);
			urlConnection.setDoInput(true);
			urlConnection.connect(); // Hier fliegt die Exception

Exception ist folgende:
Java:
06-28 14:31:43.412: E/AndroidRuntime(27389): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test/com.test.RoutePathTestActivity}: android.os.NetworkOnMainThreadException

Hoffe mal ihr könnt mir weiterhelfen 🙂
 
Zuletzt bearbeitet:
Es wäre besser, wenn du den Logcat von der entsprechenden Zeile postest.
(urlConnection.connect())
So kann man nur ahnen.
Keine Internetverbindung?
Falsche URL?
 
Hast du denn schon in die Doku geschaut?

The exception that is thrown when an application attempts to perform a networking operation on its main thread.

This is only thrown for applications targeting the Honeycomb SDK or higher. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it's heavily discouraged. See the document Designing for Responsiveness

Das Beispiel läuft auf neuen Geräten nicht mehr, weil die Netzwerkkommunikation im UI-Thread ausgeführt wird. IMHO ziemlich blöd dass das System das so vorschreibt aber du musst es in einen Thread auslagern.

PS: Der Titel ist schlecht gewählt. Dein Problem ist die Exception und nicht Android Google API.
 
Zuletzt bearbeitet:
Hast du denn schon in die Doku geschaut?



Das Beispiel läuft auf neuen Geräten nicht mehr, weil die Netzwerkkommunikation im UI-Thread ausgeführt wird. IMHO ziemlich blöd dass das System das so vorschreibt aber du musst es in einen Thread auslagern.

PS: Der Titel ist schlecht gewählt. Dein Problem ist die Exception und nicht Android Google API.

Ich finde es schon gut, dass länger andauernde Berechnungen, die das UI blockieren können ausgelagert werden. Das erhöht die Benutzerfreundlichkeit und ich als Benutzer habe keine Lust Apps zu verwenden, die blockieren. Zwar wird das Programmieren schwieriger, aber Ziel sollte es IMHO sein, eine qualitativ hochwertige App zu bauen.

Dort steht auch, dass das nur für die Honeycomb API gilt. Mich würde mal interessieren, wenn man jetzt ne niedrigere API zielt, schmiert die App, dann auf einem Handy mit höherer API ab?

Ansonsten kann man die Connection in einen Handler auslagern, der dann in die Event-Queue enqeuet wird.
 
1. Ist das Offtopic
2. Ist das eine philosophische Frage ob es gut ist eine Guideline in's System einzubacken. IMHO nicht, da es die Fragmentierung nur noch vergrößert und die ist leider Gottes nicht gerade klein. Aber mich hat keiner gefragt 😀

Dort steht auch, dass das nur für die Honeycomb API gilt. Mich würde mal interessieren, wenn man jetzt ne niedrigere API zielt, schmiert die App, dann auf einem Handy mit höherer API ab?
Ja.

Ich hab mich gerade fürchterlich darüber geärgert, dass bei der HW-Acceleration nicht darauf geachtet wurde für alle Methoden des Canvas-Objekts OpenGL-Methoden zu entwickeln. Resultat: Apps schmieren gnadenlos auf Android-Geräten mit Android 4 ab weil dort HW-Acceleration standardmäßig on ist. Etwas was ich weder im Emulator noch auf meinen nicht vorhandenen Android 4 Geräten testen kann. Toll ...

Außerdem gilt das ab der Honeyomb-API, also auch für Android 4.

Ansonsten kann man die Connection in einen Handler auslagern, der dann in die Event-Queue enqeuet wird.
Keine Frage. Am besten ist es sowieso wenn man da den Android-Weg geht und das ganze über einen IntentService regelt. Ich hab auch so eine Thread-Lösung im Moment laufen und werde die bald umschreiben, da es damit nur Probleme auf Android-Geräten gibt. Puncto wie synchronisiere ich den Thread mit der bereits verstorbenen Activity? Das Context-Objekt gibt darüber ja keinen Aufschluss ... Aber das ist ein anderes Thema.

Trotzdem finde ich diese Pflicht nicht gut, da die App so einfach abschmiert obwohl es bei allen Geräten API-Level <11 problemlos funktioniert.

Außerdem macht es das Herumspielen für Anfänger nur noch schwieriger.
 
Zuletzt bearbeitet:
Vielen Dank für die Antworten, werde es mal mit einem Thread ausprobieren wenn ich dazu komme. Nein, hatte noch nicht in die doku geschaut aber werde das auch mal machen und ja der titel ist wahrhaftig schlecht gewählt 🙂 falls das Problem dann weiterhin besteht und es unbedingt gelöst werden muss, melde ich mich nochmal.
 

Zurück
Oben