Autore Topic: Permesso negato richiesta Http  (Letto 336 volte)

Offline fedemille

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lenovo P2
  • Sistema operativo:
    Windows 10
Permesso negato richiesta Http
« il: 09 Agosto 2017, 01:22:17 CEST »
0
Ciao a tutti, da qualche giorno sto provando a risolvere un problema che non ho trovato da nessun'altra parte e mi chiedevo se voi mi potreste aiutare.
Dopo aver eseguito l'app ed avviato un IntentService nel LogCat compaiono questi warning
Codice: [Seleziona]
W/System.err: java.net.SocketException: Permission denied
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at java.net.Socket.createImpl(Socket.java:461)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at java.net.Socket.getImpl(Socket.java:524)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at java.net.Socket.setSoTimeout(Socket.java:1140)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at com.android.okhttp.Connection.connectSocket(Connection.java:195)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at com.android.okhttp.Connection.connect(Connection.java:172)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:367)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:130)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:247)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:243)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at fede_mille.casa.InvioDati.doInBackground(InvioDati.java:61)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at fede_mille.casa.InvioDati.doInBackground(InvioDati.java:25)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:304)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
08-09 00:37:38.996 26939-26967/fede_mille.casa W/System.err:     at java.lang.Thread.run(Thread.java:761)
08-09 00:39:39.096 26939-26970/fede_mille.casa W/DpmTcmClient: Couldn't find 'tcm' socket after 120times. quit trying
Premetto che nell'AndroidManifest è presente la riga
Codice (XML): [Seleziona]
<uses-permission android:name="android.permission.INTERNET" />Il servizio dovrebbe fare una richiesta ogni 5 sec ad un webserver e verificare le informazioni ricevute. La classe che ho creato per gestire ciò è questa
Codice (Java): [Seleziona]
public class InvioDati extends AsyncTask<String,Void,String> {
    private String response;
    HttpURLConnection client;

    public InvioDati(){
        super.execute("http://192.168.1.37/?");
        response = "Niente";
    }

    public String getResponse(){
        return response;
    }

    public void chiudi(){
        client.disconnect();
    }

    private static String mostroDati(InputStream in) {
        StringBuilder sb = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(in));) {
            String nextLine = "";
            while ((nextLine = reader.readLine()) != null) {
                sb.append(nextLine);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }
    @Override
    protected String doInBackground(String ... url) {
        String datiLetti = "Niente";
        try {
            URL paginaURL;
            paginaURL = new URL(url[0]);
            client = (HttpURLConnection) paginaURL.openConnection();
            InputStream risposta = new BufferedInputStream(client.getInputStream());
            datiLetti = mostroDati(risposta);


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        response = datiLetti;
        return datiLetti;
    }

    @Override
    protected void onPostExecute(String result) {

    }
}

Dopo l'avvio del service e la restituzione degli errori, il service si blocca. Spero mi possiate aiutare

Online iClaude

  • Utente normale
  • ***
  • Post: 284
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Permesso negato richiesta Http
« Risposta #1 il: 09 Agosto 2017, 18:47:58 CEST »
0
Ma cosa fa l'istruzione
super.execute("http://192.168.1.37/?"); ?

Poi non ho capito perché usi un AsyncTask visto che dice di usare un IntentService che funziona già in background...

Offline fedemille

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lenovo P2
  • Sistema operativo:
    Windows 10
Re:Permesso negato richiesta Http
« Risposta #2 il: 10 Agosto 2017, 00:52:23 CEST »
0
Quell'istruzione richiamare il metodo "doinbackground".
In ogni caso la cosa strana è che quando questa classe viene istanziata ed utilizzata nell'activity principale all'apertura dell'app, tutto funziona restituendo correttamente il contento testuale della pagina web, mentre quando viene richiamata dal service compare quell'errore visto nel logcat

Offline berpao

  • Utente junior
  • **
  • Post: 73
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:Permesso negato richiesta Http
« Risposta #3 il: 10 Agosto 2017, 11:39:56 CEST »
0
Ciao, non è che non hai chiuso la socket e quando tenti di riutilizzarla ti da l'errore? Puoi condividere eventualmente il codice che usa la classe "InvioDati" per avere maggiori dettagli?
Ciao
P

Offline fedemille

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lenovo P2
  • Sistema operativo:
    Windows 10
Re:Permesso negato richiesta Http
« Risposta #4 il: 16 Agosto 2017, 00:20:31 CEST »
0
Il codice che usa InvioDati è banalmente questo
Codice (Java): [Seleziona]
InvioDati response = new InvioDati();
                    while(response.getResponse().equals("Niente")){} // deve attendere che il server gli dia una risposta
                    String risposta = response.getResponse();
                    response.chiudi();

Io non so più che altro fare, sono fermo da giorni su questo problema di permessi che mi sembra anche una cosa alquanto stupida..

Offline berpao

  • Utente junior
  • **
  • Post: 73
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:Permesso negato richiesta Http
« Risposta #5 il: 16 Agosto 2017, 08:22:38 CEST »
0
Ciao, scusa ma ho problemi ad interpretare il codice, ti dico cosa leggo io magari sbaglio; instanzi l'oggetto InvioDati nella variabile "response", dopodichè fai un ciclo while praticamente infinito (response.getResposne().equals("Niente") dovrebbe essere sempre true perchè nel costruttore di InvioDati lo valorizzi così), poi al di fuori del ciclo while provi ad instanziare la variabile "risposta", ma in teoria li non ci arrivi mai per il ciclo di cui sopra... è giusto quello che leggo, o sto interpretando male? Se è giusto, torno ad ipotizzare che la seconda volta che fai il giro, il socket è ancora aperto (non avendolo mai chiuso perchè response.chiudi() non viene mai chiamato) e ti da l'eccezione... fammi sapere
Ciao
P

Offline fedemille

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lenovo P2
  • Sistema operativo:
    Windows 10
Re:Permesso negato richiesta Http
« Risposta #6 il: 17 Agosto 2017, 03:13:35 CEST »
0
Ciao, innanzitutto vorrei dirti che ho risolto il problema (o meglio bug?). Comunque riguardo a ciò che mi hai detto sei tu che hai interpretato male :D, dato che quel ciclo permette di attendere che il server comunichi una risposta al client, altrimenti la risposta sarebbe vuota per i primi istanti dato che non l'ha ancora ricevuta.
Ora parlando di come ho risolto: praticamente sono arrivato alla conclusione che è un bug di android Studio, il quale passando da una vecchia versione di esso a quella attuale (2.3), mantenendo però lo stesso progetto, senza motivo c'erano bug strani tra cui questo e anche che non mi mostrava i toast visualizzati da un service.. Alla fine semplicemente ho rifatto il progetto da capo direttamente dall'ultima versione del programma copiando e incollando le vecchie cose e funziona alla perfezione.
Penso che a volte anche gli sviluppatori di google sbagliano ;)
Grazie a tutti comunque per l'aiuto!

Offline berpao

  • Utente junior
  • **
  • Post: 73
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:Permesso negato richiesta Http
« Risposta #7 il: 17 Agosto 2017, 08:19:10 CEST »
0
OK, meglio così allora
Ciao
P