Autore Topic: Connessione  (Letto 1317 volte)

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Connessione
« il: 19 Giugno 2012, 16:49:33 CEST »
0
Salve a tutti in relazione a un altro mio topic ho riscontrato un altro noisissimo problema con
l'Acer Iconia Tab A500 che monta Android 3.0

La mia applicazione si connette a un server remoto tramite tcp...solamente che non so per quale motivo ad un certo punto dell'applicazione decide di non connettersi...
Sull'emulatore funziona tutto mentre quando passa sul tablet mi da la seguente schermata di LogCat

Codice (Java): [Seleziona]
06-19 16:46:56.530: W/System.err(4454): android.os.NetworkOnMainThreadException
06-19 16:46:56.530: W/System.err(4454):         at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077)
06-19 16:46:56.530: W/System.err(4454):         at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:368)
06-19 16:46:56.530: W/System.err(4454):         at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:208)
06-19 16:46:56.530: W/System.err(4454):         at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:187)
06-19 16:46:56.530: W/System.err(4454):         at java.net.Socket.startupSocket(Socket.java:625)
06-19 16:46:56.530: W/System.err(4454):         at java.net.Socket.tryAllAddresses(Socket.java:146)
06-19 16:46:56.530: W/System.err(4454):         at java.net.Socket.<init>(Socket.java:204)
06-19 16:46:56.530: W/System.err(4454):         at java.net.Socket.<init>(Socket.java:171)
06-19 16:46:56.530: W/System.err(4454):         at lombardi.tesi.TabDiagnosticaCommand.connettiMaster(TabDiagnosticaCommand.java:297)
06-19 16:46:56.540: W/System.err(4454):         at lombardi.tesi.TabDiagnosticaCommand.onCreate(TabDiagnosticaCommand.java:259)
06-19 16:46:56.540: W/System.err(4454):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
06-19 16:46:56.540: W/System.err(4454):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
06-19 16:46:56.540: W/System.err(4454):         at android.app.ActivityThread.startActivityNow(ActivityThread.java:1577)
06-19 16:46:56.540: W/System.err(4454):         at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:130)
06-19 16:46:56.540: W/System.err(4454):         at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:342)
06-19 16:46:56.540: W/System.err(4454):         at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:680)
06-19 16:46:56.540: W/System.err(4454):         at android.widget.TabHost.setCurrentTab(TabHost.java:349)
06-19 16:46:56.540: W/System.err(4454):         at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:149)
06-19 16:46:56.540: W/System.err(4454):         at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:556)
06-19 16:46:56.540: W/System.err(4454):         at android.view.View.performClick(View.java:3100)
06-19 16:46:56.540: W/System.err(4454):         at android.view.View$PerformClick.run(View.java:11644)
06-19 16:46:56.540: W/System.err(4454):         at android.os.Handler.handleCallback(Handler.java:587)
06-19 16:46:56.540: W/System.err(4454):         at android.os.Handler.dispatchMessage(Handler.java:92)
06-19 16:46:56.540: W/System.err(4454):         at android.os.Looper.loop(Looper.java:126)
06-19 16:46:56.540: W/System.err(4454):         at android.app.ActivityThread.main(ActivityThread.java:3998)
06-19 16:46:56.540: W/System.err(4454):         at java.lang.reflect.Method.invokeNative(Native Method)
06-19 16:46:56.540: W/System.err(4454):         at java.lang.reflect.Method.invoke(Method.java:491)
06-19 16:46:56.540: W/System.err(4454):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
06-19 16:46:56.540: W/System.err(4454):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
06-19 16:46:56.540: W/System.err(4454):         at dalvik.system.NativeStart.main(Native Method)

Ma non riesco a capire come mai riesce a connettersi a un server su una porta...e quando deve connettersi a un altro su una porta differente non ce la fa. Tengo a precisare che i due server a cui mi riferisco sono sullo stesso indirizzo IP e con l'emulatore funziona tutto.

Che fare?

grazie a tutti
Non esistono problemi, ma solo soluzioni...

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Connessione
« Risposta #1 il: 19 Giugno 2012, 17:02:06 CEST »
0
Il problema è questo: "android.os.NetworkOnMainThreadException"

Non puoi fare chiamate http dal thread principale... devi usare un AsyncTask  ;-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Re:Connessione
« Risposta #2 il: 19 Giugno 2012, 17:10:29 CEST »
0
Grazie mille...
ma questo discorso vale esclusivamente per la connessione o per qualsiasi comunicazione con il server?

Ti spiego...ho una schermata che dovrebbe dare dei comandi...e le AsyncTask se ho capito bene possono essere eseguite una sola volta no?
Come potrei fare per poterle eseguire più volte?

Ciao e grazie della tempestiva risposta
« Ultima modifica: 19 Giugno 2012, 17:13:34 CEST da Lomba1986 »
Non esistono problemi, ma solo soluzioni...

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Connessione
« Risposta #3 il: 19 Giugno 2012, 17:15:49 CEST »
0
Citazione
ma questo discorso vale esclusivamente per la connessione o per qualsiasi comunicazione con il server?
Forse mi sbaglio, ma ho sempre pensato che qualunque forma di "comunicazione" verso un server implicasse una "connessione", nella fattispecie una connessione HTTP  :-) Ad ogni modo, credo che NetworkOnMainThreadException si riferisca a un qualunque tipo di uso della rete sul thread principale.
« Ultima modifica: 19 Giugno 2012, 17:17:35 CEST da DarnellNajanReed »

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Re:Connessione
« Risposta #4 il: 19 Giugno 2012, 17:18:50 CEST »
0
Ho scritto male io...

intendevo se era un ndiscorso valido solo per l'instaurazione della connessione, oppure per ogni scambio di dati...

Comunque come posso riutilizzare le AsyncTask per poter eseguire lo scambio di dati più volte, in modo che risponda ai desideri dell'utente?
Non esistono problemi, ma solo soluzioni...

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Connessione
« Risposta #5 il: 19 Giugno 2012, 17:25:01 CEST »
0
Citazione
intendevo se era un ndiscorso valido solo per l'instaurazione della connessione, oppure per ogni scambio di dati...
L'idea di fondo è che qualunque operazione potenzialmente bloccante deve essere gestita in un thread a parte. Quindi qualunque operazione che coinvolga la rete.

Citazione
Comunque come posso riutilizzare le AsyncTask per poter eseguire lo scambio di dati più volte, in modo che risponda ai desideri dell'utente?
Brutalmente, istanzia un nuovo AsyncTask dello stesso tipo e mandalo in esecuzione.

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Connessione
« Risposta #6 il: 19 Giugno 2012, 17:52:38 CEST »
0
Come ha detto DarnellNajanReed, iniziallizza un asynctask ogni volta che hai bisogno!
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Re:Connessione
« Risposta #7 il: 19 Giugno 2012, 22:59:13 CEST »
0
Quindi idealmente se ho una struttura composta come segue:

onClickButton--> chiamo una funzione A che istanzia un async B ed chiama B.execute

dovrebbe funzionare no?

Per il ciclo di vita una volta terminata la funzione A il garbage collector dovrebbe cestinare e cancellare l'async B e quindi ogni volta che clicco sul pulsante questo manda in esecuzione l'async...giusto?
Non esistono problemi, ma solo soluzioni...

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Connessione
« Risposta #8 il: 20 Giugno 2012, 00:20:42 CEST »
0
Dovrebbe funzionare! ;) prova e facci sapere!  :-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Re:Connessione
« Risposta #9 il: 21 Giugno 2012, 10:23:14 CEST »
0
Ho fatto qualche prova e sembra funzioanre tutto correttamente :D

Almeno un problema è stato risolto...

Grazie a tutti
tempestivi, sagaci e disponibili come sempre  ;-)
Non esistono problemi, ma solo soluzioni...