Autore Topic: problemi HTTPGet request  (Letto 1092 volte)

Offline Lovercraft

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    eee transformer
  • Sistema operativo:
    windows 7
problemi HTTPGet request
« il: 30 Ottobre 2011, 18:25:58 CET »
0
Ciao a tutti, sono Stefano. Sto muovendo i primi passi nella programmazione su Android e subito ho riscontrato un problema che mi tiene bloccato da un pò: il programma effettua una richiesta di una pagina, il codice è questo:

Codice (Java): [Seleziona]
package it.stefano.android;

import java.io.IOException;
import java.io.InputStream;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class LogginInActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tv=(TextView)findViewById(R.id.textView1);
    }
   
    @Override
    public void onResume(){
        super.onResume();
        getInputStreamFromUrl("www.google.it");
    }
   
    public static InputStream getInputStreamFromUrl(String url) {
                InputStream content = null;
                try {
                        HttpGet httpGet = new HttpGet(url);
                        HttpClient httpclient = new DefaultHttpClient();
                        // Execute HTTP Get Request
                        Log.v("my", "pre execute");
                        HttpResponse response = httpclient.execute(httpGet);
                        Log.v("my", "post execute");
                        content = response.getEntity().getContent();
                } catch (Exception e) {
                        //handle the exception !
                }
                return content;
}
}

Il problema è che si blocca all'execute e non arriva a stampare il secondo log.
Il LogCat relativo è il seguente:
Codice: [Seleziona]
10-30 18:17:57.032: I/ActivityManager(88): Start proc it.stefano.android for activity it.stefano.android/.LogginInActivity: pid=889 uid=10041 gids={3003}
10-30 18:17:57.410: W/NetworkManagementSocketTagger(88): setKernelCountSet(10041, 1) failed with errno -2
10-30 18:17:58.560: V/stefano(889): onresume
10-30 18:17:58.619: V/my(889): pre execute
10-30 18:17:59.000: D/gralloc_goldfish(889): Emulator without GPU emulation detected.
10-30 18:17:59.080: I/ActivityManager(88): Displayed it.stefano.android/.LogginInActivity: +2s138ms
10-30 18:17:59.510: W/NetworkManagementSocketTagger(88): setKernelCountSet(10004, 0) failed with errno -2

So che forse è una stupidaggine, però io ci sto sbattendo la testa da un bel pò.

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:problemi HTTPGet request
« Risposta #1 il: 30 Ottobre 2011, 22:47:52 CET »
0
All'interno della clausola catch metti e.printStackTrace(), altrimenti non saprai mai se viene generato un errore e che tipo di errore.

Offline Lovercraft

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    eee transformer
  • Sistema operativo:
    windows 7
Re:problemi HTTPGet request
« Risposta #2 il: 30 Ottobre 2011, 23:33:56 CET »
0
aggiungendo il printStackTrace il log diventa:
Codice: [Seleziona]
10-30 23:31:50.715: W/WindowManager(86): Failure taking screenshot for (229x135) to layer 21010
10-30 23:31:50.775: W/NetworkManagementSocketTagger(86): setKernelCountSet(10041, 1) failed with errno -2
10-30 23:31:50.815: V/stefano(549): onresume
10-30 23:31:50.815: V/my(549): pre execute
10-30 23:31:50.896: W/System.err(549): java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=www.google.it
10-30 23:31:50.896: W/System.err(549):         at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591)
10-30 23:31:50.925: W/System.err(549):         at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293)
10-30 23:31:50.925: W/System.err(549):         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
10-30 23:31:50.935: W/System.err(549):         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
10-30 23:31:50.935: W/System.err(549):         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
10-30 23:31:50.935: W/System.err(549):         at it.stefano.android.LogginInActivity.getInputStreamFromUrl(LogginInActivity.java:40)
10-30 23:31:50.945: W/System.err(549):         at it.stefano.android.LogginInActivity.onResume(LogginInActivity.java:30)
10-30 23:31:50.945: W/System.err(549):         at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1154)
10-30 23:31:50.965: W/System.err(549):         at android.app.Activity.performResume(Activity.java:4539)
10-30 23:31:50.965: W/System.err(549):         at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2433)
10-30 23:31:50.965: W/System.err(549):         at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2471)
10-30 23:31:50.965: W/System.err(549):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1172)
10-30 23:31:50.975: W/System.err(549):         at android.os.Handler.dispatchMessage(Handler.java:99)
10-30 23:31:50.975: W/System.err(549):         at android.os.Looper.loop(Looper.java:137)
10-30 23:31:50.975: W/System.err(549):         at android.app.ActivityThread.main(ActivityThread.java:4340)
10-30 23:31:50.975: W/System.err(549):         at java.lang.reflect.Method.invokeNative(Native Method)
10-30 23:31:50.975: W/System.err(549):         at java.lang.reflect.Method.invoke(Method.java:511)
10-30 23:31:50.975: W/System.err(549):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-30 23:31:50.985: W/System.err(549):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-30 23:31:50.995: W/System.err(549):         at dalvik.system.NativeStart.main(Native Method)
10-30 23:31:51.495: W/InputManagerService(86): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@4139ae70 (uid=10004 pid=188)
10-30 23:31:52.196: W/NetworkManagementSocketTagger(86): setKernelCountSet(10004, 0) failed with errno -2

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:problemi HTTPGet request
« Risposta #3 il: 31 Ottobre 2011, 08:01:53 CET »
0
Hai per caso provato a mettere anche http:// ?

Comunque, non è una buona idea fare una richiesta http in quel punto, dovresti semmai far partire un thread o un AsyncTask apposito ;)

Offline Lovercraft

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    eee transformer
  • Sistema operativo:
    windows 7
Re:problemi HTTPGet request
« Risposta #4 il: 31 Ottobre 2011, 10:18:44 CET »
0
Anche con l'http i problemi sono uguali. Ora provo ad fare la richiesta come thread.

Offline Lovercraft

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    eee transformer
  • Sistema operativo:
    windows 7
Re:problemi HTTPGet request
« Risposta #5 il: 31 Ottobre 2011, 10:46:36 CET »
0
Ok ho creato il thread così:
Codice (Java): [Seleziona]
public static void getInputStreamFromUrl(String url) {
        Thread workerThread = new Thread(new Runnable() {

                        @Override
                        public void run() {
                                try {
                                         String TARGET_URL="http://www.google.it";
                                        // Creiamo il riferimento al HttpClient
                                        HttpClient httpClient = new DefaultHttpClient();
                                        // Creiamo la HttpUriRequest relativamente al metodo GET
                                        HttpGet request = new HttpGet();
                                        // Impostiamo il valore dell'URI di destinazione
                                        URI targetUri = new URI(TARGET_URL);
                                        request.setURI(targetUri);
                                        // A questo punto invochiamo il server
                                        Log.v("my", "prima execute");
                                        ResponseHandler handler=new BasicResponseHandler();
                                        String ris=httpClient.execute(request, handler);
                                        Log.v("my", "dopo execute: "+ris);
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }

                        }

                });
                //return content;
        workerThread.start();
}

Grazie mille per l'aiuto.