Autore Topic: App crash con getLastModified  (Letto 808 volte)

Offline RickySteel4

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Evo 3D
App crash con getLastModified
« il: 02 Dicembre 2012, 16:26:17 CET »
0
Salve a tutti, volevo proporvi un piccolo questito..

Ho implementato una piccola scansione aggiornamenti di un file remoto ad un determinato url.

Dopo aver creato la connessione utilizzo getLastModified() per ricevere il long e poter confrontare il valore.
Non appena invoco getLastModified, l'app crasha inesorabilmente rilasciando un RuntimeException

Lo stesso codice funziona tranquillamente su Java, mentre su Android mi dà questo problema... Le librerie in gioco sono pure le stesse, non riesco a comprendere il problema.
L'app crasha non appena viene invocato quel medoto

Vi ringrazio in anticipo.


Codice: [Seleziona]
private boolean checkUpdates() {
               
                Log.d("Log - - >", "vediamo se ci sono update........");
                URL url;
                try {
                       
                        url = new URL(Creden.addressURL);
                       
                        URLConnection conn = url.openConnection();
                       
                        Log.d("Log - - >", "Collegamento al sito.. per update  ");
                       
                       
                       
                       
                        String userpass = Creden.username + ":" + Creden.password;
                       
                        String basicAuth = "Basic " + new String(Base64.encode(userpass.getBytes(), Base64.DEFAULT));
                        conn.setRequestProperty ("Authorization", basicAuth);
                       
                        Log.d("Log - - >", "Autentificazione :) per update");
                       
                       
                       
                        long data = conn.getLastModified();
                       
                        if(data > Creden.modified1){
                               
                               
                               
                                return true;
                               
                        }else return false;
                       
                       
                } catch (MalformedURLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                 return false;
               
        }


 :-X

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:App crash con getLastModified
« Risposta #1 il: 02 Dicembre 2012, 21:43:50 CET »
0
Dovresti postare il logcat completo del crash, per capire con precisione la causa.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline agenio

  • Utente junior
  • **
  • Post: 77
  • Respect: +11
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Sistema operativo:
    Windows 8.1
Re:App crash con getLastModified
« Risposta #2 il: 02 Dicembre 2012, 22:38:26 CET »
0
Se lo stai provando su android ics o successivi (4 - 4.2) allora il problema risiede nella connessione fatta nel main thread.

Dovresti spostare la connessione all'interno di un asynctask http://developer.android.com/reference/android/os/AsyncTask.html

Offline RickySteel4

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Evo 3D
Re:App crash con getLastModified
« Risposta #3 il: 03 Dicembre 2012, 11:38:42 CET »
0
Codice: [Seleziona]
12-03 10:27:05.255: E/AndroidRuntime(1372): FATAL EXCEPTION: main
12-03 10:27:05.255: E/AndroidRuntime(1372): java.lang.RuntimeException: Unable to create service test.testservicedown.ServiceDown: android.os.NetworkOnMainThreadException
12-03 10:27:05.255: E/AndroidRuntime(1372):         at android.app.ActivityThread.handleCreateService(ActivityThread.java:2263)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at android.app.ActivityThread.access$1600(ActivityThread.java:123)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at android.os.Handler.dispatchMessage(Handler.java:99)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at android.os.Looper.loop(Looper.java:137)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at android.app.ActivityThread.main(ActivityThread.java:4424)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at java.lang.reflect.Method.invokeNative(Native Method)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at java.lang.reflect.Method.invoke(Method.java:511)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at dalvik.system.NativeStart.main(Native Method)
12-03 10:27:05.255: E/AndroidRuntime(1372): Caused by: android.os.NetworkOnMainThreadException
12-03 10:27:05.255: E/AndroidRuntime(1372):         at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at java.net.InetAddress.getAllByName(InetAddress.java:220)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at libcore.net.http.HttpURLConnectionImpl.getHeaderField(HttpURLConnectionImpl.java:130)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at java.net.URLConnection.getHeaderFieldDate(URLConnection.java:528)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at java.net.HttpURLConnection.getHeaderFieldDate(HttpURLConnection.java:724)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at java.net.URLConnection.getLastModified(URLConnection.java:610)
12-03 10:27:05.255: E/AndroidRuntime(1372):         at test.testservicedown.ServiceDown.check1(ServiceDown.java:216)

Ecco il log.


Se lo stai provando su android ics o successivi (4 - 4.2) allora il problema risiede nella connessione fatta nel main thread.

Dovresti spostare la connessione all'interno di un asynctask http://developer.android.com/reference/android/os/AsyncTask.html

Sì, esatto. Sono su android 4+

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:App crash con getLastModified
« Risposta #4 il: 03 Dicembre 2012, 11:39:51 CET »
0
la soluzione è esattamente quella proposta da agenio, fai una chiamata di rete sul main thread.
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia