Java Android - HttpResponse

Icewurm

Lt. Junior Grade
Registriert
Juli 2006
Beiträge
284
Hallo,

Ich habe gerade begonnen mich mit Android zu beschäftigen und schon gibts das erste Problem.

Mein Programm soll per Php-Script-Aufruf eine Datenbankabfrage starten und in einer Listview anzeigen.

Leider tritt jetzt aber ein Fehler bei der Anweisung "httpClient.execute(httpPost)" auf.

Code:
try {

            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

Internet-Permissions sind im Manifest eingetragen:

<uses-permission android:name="android.permission.INTERNET" />

Dennoch erhalte im Logcatfenster die Fehlermeldung:

08-03 19:09:55.164 1959-2868/? W/ActivityManager: Permission denied: checkComponentPermission() owningUid=10108
08-03 19:09:55.164 1959-2868/? W/ActivityManager: Permission denied: checkComponentPermission() owningUid=10108
08-03 19:09:55.174 1959-1969/? W/ActivityManager: Permission denied: checkComponentPermission() owningUid=10108
08-03 19:09:55.174 1959-1969/? W/ActivityManager: Permission denied: checkComponentPermission() owningUid=10108
08-03 19:09:55.184 1959-6484/? W/ActivityManager: Permission denied: checkComponentPermission() owningUid=10108
08-03 19:09:55.184 1959-6484/? W/ActivityManager: Permission denied: checkComponentPermission() owningUid=10108
08-03 19:09:55.194 1959-4474/? W/ActivityManager: Permission denied: checkComponentPermission() owningUid=10108
08-03 19:09:55.194 1959-4474/? W/ActivityManager: Permission denied: checkComponentPermission() owningUid=10108
08-03 19:09:55.214 1959-2282/? W/ActivityManager: Permission denied: checkComponentPermission() owningUid=10108
08-03 19:09:55.214 1959-2282/? W/ActivityManager: Permission denied: checkComponentPermission() owningUid=10108


Im Internet findet man dazu haufenweise Lösungsvorschläge, die lösen mein Problem aber nicht.


Unter euch sind sicher einige Android-Entwickler, für die die Frage lächerlich ist.

Wäre für eine kleine Hilfestellung dankbar.

Michael
 
Die Internet-Permission habe ich gesetzt.

Ich hoffe an der richtigen Stelle:

...
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="16" />

<uses-permission android:name="android.permission.INTERNET" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"

...
Ergänzung ()

Und weder auf dem Handy noch am Laptop befindet sich eine Firewall.
 
Spuckt er dir nur diese Fehler im Logcat aus ? Oder noch mehr ? Benutzt du einen Router um ins Internet zugehen ?
 
Zuletzt bearbeitet:
Das könnte ev. noch relevant sein:

08-03 19:33:05.090 12975-12975/? E/Trace: error opening trace file: No such file or directory (2)
08-03 19:33:11.816 7834-8255/? W/System.err: javax.net.ssl.SSLException: Read error: ssl=0x5c088730: I/O error during system call, Connection timed out
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_read(Native Method)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:675)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
08-03 19:33:11.836 7834-8255/? W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
08-03 19:33:11.836 7834-8255/? W/System.err: at com.mcafee.cloudscan.CloudScanMgr.a(Unknown Source)
08-03 19:33:11.836 7834-8255/? W/System.err: at com.mcafee.cloudscan.b.run(Unknown Source)
Ergänzung ()

Die verwendete Url kann ich am Handy im Browser aufrufen. Also denke ich, dass ich am Router vorbeikomme.

Meine c# Programme können sich auch aufs Nas verbinden.
 
Zuletzt bearbeitet:
entwickelst du mit dem Emu oder direkt auf deinem Handy ? Also der Fehler liegt darin das deine Verbindung nicht erfolg reich ist.Sie kriegt halt nen Timeout.
 
Zuletzt bearbeitet: (Move to a new Thread)
Hab beides probiert. Beim Emulator bekomme ich keine Permission denied Meldungen.

Es funktioniert aber beides nicht.

Sobald ich mit dem Debugger bei der Zeile bin reagiert das Programm nicht mehr. Es wird keine Exception aufgerufen.

Erweitere ich den Try-Catchblock um:

catch (Exception e)
{
...
{

dann wird jedesmal Diese aufgerufen, wobei e = null ist.


Mein Nas steht leider nicht bei mir. Ich verbinde mich über dyndns und Port 5999 aufs Nas.

String url = "http://... .dyndns.tv:5999/DB_Android_Test.php";
 
Zuletzt bearbeitet: (Ergänzung)
Also Ich denke mal jetzt das deine Situation so ist.Du hast ein NAS , wo auch ein Webserver drauf ist. Also verbindest du dich lokal dann sollte es kein Prob mit der FW geben.Wie schaut deine URL aus auf du dich connecten möchtest. Http oder Https ?
 
String url = "http://... .dyndns.tv:5999/DB_Android_Test.php";

müsste doch funktionieren oder?
 
Ich fahre morgen sowieso nach Hause, dann werde ich es direkt ausprobieren.

Auf jeden Fall danke für Hilfe!
 
Zuletzt bearbeitet:
Zur Permission: ist an der richtigen Stelle eingetragen.
Zur URL: Eventuell hat er ja ein Problem, dass direkt über die dyndns aufzurufen, wenn du dich im selben Netzwerk befindest (per WLAN). // edit: hat sich wohl erledigt. Ich denke du greifst über das Internet darauf zu.

Ansonsten: Wo wird der Code aufgerufen? Es sollte in einem Background Task sein, sonst mag Android das glaube ich nicht. Aber dann müsste an sich die Fehlermeldung eine andere sein.

Was du auch noch versuchen könntest, wäre mal einen anderen Code zu benutzen. Z.B. das okHTTP library von square - http://square.github.io/okhttp/

Was noch in der Fehlermeldung steht .... "08-03 19:33:05.090 12975-12975/? E/Trace: error opening trace file: No such file or directory (2)
"
Eventuell mal die Fehlerausgabe anders im Logcat ausgeben, mit Log.d(Titel, e.toString());
 
Die Log.d(TAG,...) - Anweisungen werden im catchblock gar nicht ausgeführt, bzw. bleibt bei deren Ausführung hängen.

Das mit dem Backround-Task habe ich auch schon gelesen, wollte aber mangels Erfahrung mit Android drauf verzichten.
Ich dachte, dass es kein Timeout geben wird da die DB-Abfrage in der gleichen Sekunde fertig ist, wenn man die Url im Browser eingibt.

Ich rufe das ganze unter onCreate auf. Als erste Anweisung.
 
Probier das einfach mal mit einem AsyncTask ... der Code dafür ist folgender, du musst dann bloß noch den http code einfügen:
Code:
AsyncTask<String, String, Boolean> test = new AsyncTask<String, String, Boolean>() {
    @Override
    protected Boolean doInBackground(String... params) {
        // hier den http code einfügen
        return false;
    }
};
test.execute("");

Ist sicherlich nicht der schönste Code, sollte aber dann das Problem schon einmal ausschließen.
Ergänzung ()

Freut zu hören, dass es jetzt klappt :-) Falls du noch mehr Informationen zum Thema AsyncTask brauchst findest du in der Developer Reference einige Informationen mit Beispielen dazu: http://developer.android.com/reference/android/os/AsyncTask.html
 
Zuletzt bearbeitet: (Ergänzung zum AsyncTask)
Super, danke. Werd ich dann gleich probieren.
Ergänzung ()

Mit dem AsyncTask funktionierts jetzt!

Dann danke nocheinmal, ohne dich wäre ich noch verzweifelt.


Jetzt kann ich beruhigt schlafen gehen. :)
 
Zurück
Oben