Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    103

    [java android] Download stringa da URL

    Stavo provando a connettere il dispositivo alla rete seguendo la documentazione ufficile: http://developer.android.com/trainin...onnecting.html mi da un problema. Nel metodo doInBackground() non mi riconosce downloadUrl() come mai?

    codice:
    package com.example.networkconnection;
    
    import java.io.IOException;
    
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.app.Activity;
    import android.app.DownloadManager;
    import android.content.Context;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
        
        
        private EditText urlText;
        private TextView textView;
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);   
            urlText = (EditText) findViewById(R.id.myUrl); //dove metto l'url
            textView = (TextView) findViewById(R.id.myText); // textView 
        }
    
        /*Verifico che ci sia una connessione internet*/
        public void myClickHandler(View view) {
            //ottengo l'indirizzo web dalla urlText
            String stringUrl = urlText.getText().toString(); //la converto in stringa
            ConnectivityManager connMgr = (ConnectivityManager) 
                getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) {
                new DownloadWebpageTask().execute(stringUrl); //stringurl è quello che devo passare
            } else {
                textView.setText("Manca la connessione");
            }
        }
    
         
         private class DownloadWebpageTask extends AsyncTask<String, Void, String> {
            @Override
            protected String doInBackground(String ... urls) { //passo come parametro l'url della pagina web
                  
                
                try {
                    
                
                    return downloadUrl(urls[0]); //prende la stringa per trasformarlo in oggetto URL
                    
                } catch (IOException e) {
                    return "Errore nel ricevere i dati";
                }
            }
            
            @Override
            protected void onPostExecute(String result) {
                textView.setText(result);
           }
        }
       
    }

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ma lo hai dichiarato e implementato il metodo downloadUrl() ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    103
    io ho copiato pari pari dalla documentazione ufficiale sopra elencata perchè è un argomento che non ho mai trattato. io l'ho dichiarato cosi come trovato.

  4. #4
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Poco più sotto, sempre nella pagina da te linkata, c'è una possibile implementazione del metodo. E' chiaro che se tu butti lì un downloadUrl() lui (intendo Eclipse, NetBeans o quello che usi) non sa cosa sia.
    Per tua comodità riporto il codice della doc
    codice:
    // Given a URL, establishes an HttpUrlConnection and retrieves
    // the web page content as a InputStream, which it returns as
    // a string.
    privateString downloadUrl(String myurl)throwsIOException{
        InputStreamis=null;
        // Only display the first 500 characters of the retrieved
        // web page content.
        int len =500;
            
        try{
            URL url =new URL(myurl);
            HttpURLConnection conn =(HttpURLConnection) url.openConnection();
            conn.setReadTimeout(10000/* milliseconds */);
            conn.setConnectTimeout(15000/* milliseconds */);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            // Starts the query
            conn.connect();
            int response = conn.getResponseCode();
            Log.d(DEBUG_TAG,"The response is: "+ response);
            is= conn.getInputStream();
    
            // Convert the InputStream into a string
            String contentAsString = readIt(is, len);
            return contentAsString;
            
        // Makes sure that the InputStream is closed after the app is
        // finished using it.
        }finally{
            if(is!=null){
                is.close();
            } 
        }
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    103
    Grazie mille scusa ma sono alle prime armi con questa parte di android. Ma facendo cosi se la provo non dovrebbe succedere niente giusto? io ho fatto una view con dentro un edit text e una text view. Dovrei fare un pulsante che mi permetta di navigare giusto?

  6. #6
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Il metodo downloadUrl(), per come è scritto, ti dovrebbe restituire il codice sorgente della pagina (nella stringa chiamata contentAsString). Sta poi a te decidere cosa farne: lo puoi visualizzare in una TextView, inviare via mail, salvare su file, ecc.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    103
    Grazie mille dell'aiuto

  8. #8

    Moderazione

    Le discussioni relative a Android non sono trattate qui, ma nella sezione Java.

    Provvedo a spostare il thread (e aggiungo un minimo di descrizione al titolo).
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    103
    Scusa ma ho un'altro problema. Ho provato a mettere un pulsante in modo che quando clicco mi deve venire stampo se è presente o meno la connessione. L'unica cosa che ho fatto è stato quello di sostituire il setOnClickListener () con myClickHandler(View view) però quando clicco sul pulsante crasha. Ecco il codice

    codice:
    package com.example.networkconnection;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.app.Activity;
    import android.app.DownloadManager;
    import android.content.Context;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
        
        
        private static final String DEBUG_TAG = null;
        private EditText urlText;
        private TextView textView;
        private Button button;
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);   
            urlText = (EditText) findViewById(R.id.myUrl); //dove metto l'url
            textView = (TextView) findViewById(R.id.myText); // textView 
            button = (Button)findViewById(R.id.btn);
        
    
        /*Verifico che ci sia una connessione internet*/
      // public void myClickHandler(View view) {
            //ottengo l'indirizzo web dalla urlText
        
        button.setOnClickListener(new OnClickListener() {
            
            public void onClick(View v) {
            String stringUrl = urlText.getText().toString(); //la converto in stringa
            ConnectivityManager connMgr = (ConnectivityManager) 
                getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) {
                new DownloadWebpageTask().execute(stringUrl);
            } else {
                textView.setText("Manca la connessione");
            }
            }
        });
    }
    
    
        //}
    
         
         private class DownloadWebpageTask extends AsyncTask<String, Void, String> {
            @Override
            protected String doInBackground(String ... urls) { //passo come parametro l'url della pagina web
                  
                
                try {
                    
                
                    return downloadUrl(urls[0]); //ritorna la string url
                    
                } catch (IOException e) {
                    return "Errore nel ricevere i dati"; //se non va a buon fine da errore
                }
            }
            
            @Override
            protected void onPostExecute(String result) {
                textView.setText(result);
           }
        }
       
         /*implementazione del metodo downloadURL*/
         
     
    
    private String downloadUrl(String myurl) throws IOException {
        InputStream is = null;
       
        int len = 500;
            
        try {
            URL url = new URL(myurl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(10000 /* milliseconds */);
            conn.setConnectTimeout(15000 /* milliseconds */);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            // Starts the query
            conn.connect();
            int response = conn.getResponseCode();
            Log.d(DEBUG_TAG, "The response is: " + response);
            is = conn.getInputStream();
    
            
            String contentAsString = readIt(is, len);
            return contentAsString;
       
        } finally {
            if (is != null) {
                is.close();
            } 
        }
    }
    
    private String readIt(InputStream is, int len) {
        // TODO Auto-generated method stub
        return null;
    }
    }

  10. #10
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao, è probabile che il vecchio metodo myClickHandler fosse associato al bottone direttamente nel file xml (dovrebbe esserci qualcosa come android: onClick="myClickHandler"). Prova a rimuovere quella riga.
    In ogni caso ricordati che il primo strumento per il debug è il LogCat, che contiene una descrizione dell'eccezione e anche la riga di codice che la genera.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.