Autore Topic: Leggere e scrivere su un dadabase  (Letto 1719 volte)

Offline Ray13

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Leggere e scrivere su un dadabase
« il: 29 Gennaio 2013, 00:29:51 CET »
0
Ciao ragazzi, grazie per l'attenzione.

Mi scuso subito se ho sbagliato ma vedendo la data ho preferito aprire un nuovo topic. Ho trovato nel primo commento di questo topic un ottimo esempio:

[Java Mysql Android] Cosa usare per interrogare un db Mysql su Aruba. - Android Developers Italia

per leggere nome e cognome da un db e riempire una listView.

Funziona tutto ma un solo problema... se faccio partire su un emulatore api 2.2 fuziona. Se facco partire un api 14 o 16 quindi 4.0 o 4.1 crasha con i seguenti log:


01-28 23:27:52.058: E/Trace(741): error opening trace file: No such file or directory (2)
01-28 23:27:52.758: D/AndroidRuntime(741): Shutting down VM
01-28 23:27:52.758: W/dalvikvm(741): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
01-28 23:27:52.778: E/AndroidRuntime(741): FATAL EXCEPTION: main
01-28 23:27:52.778: E/AndroidRuntime(741): java.lang.RuntimeException: Unable to start activity ComponentInfo{mio.provaprogetto/mio.provaprogetto.LiukPresencesActivity}: android.os.NetworkOnMainThreadException
01-28 23:27:52.778: E/AndroidRuntime(741):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
01-28 23:27:52.778: E/AndroidRuntime(741):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
01-28 23:27:52.778: E/AndroidRuntime(741):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
01-28 23:27:52.778: E/AndroidRuntime(741):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
01-28 23:27:52.778: E/AndroidRuntime(741):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-28 23:27:52.778: E/AndroidRuntime(741):    at android.os.Looper.loop(Looper.java:137)
01-28 23:27:52.778: E/AndroidRuntime(741):    at android.app.ActivityThread.main(ActivityThread.java:4745)
01-28 23:27:52.778: E/AndroidRuntime(741):    at java.lang.reflect.Method.invokeNative(Native Method)
01-28 23:27:52.778: E/AndroidRuntime(741):    at java.lang.reflect.Method.invoke(Method.java:511)
01-28 23:27:52.778: E/AndroidRuntime(741):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-28 23:27:52.778: E/AndroidRuntime(741):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-28 23:27:52.778: E/AndroidRuntime(741):    at dalvik.system.NativeStart.main(Native Method)
01-28 23:27:52.778: E/AndroidRuntime(741): Caused by: android.os.NetworkOnMainThreadException
01-28 23:27:52.778: E/AndroidRuntime(741):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
01-28 23:27:52.778: E/AndroidRuntime(741):    at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
01-28 23:27:52.778: E/AndroidRuntime(741):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
01-28 23:27:52.778: E/AndroidRuntime(741):    at java.net.InetAddress.getAllByName(InetAddress.java:214)
01-28 23:27:52.778: E/AndroidRuntime(741):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
01-28 23:27:52.778: E/AndroidRuntime(741):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
01-28 23:27:52.778: E/AndroidRuntime(741):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
01-28 23:27:52.778: E/AndroidRuntime(741):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
01-28 23:27:52.778: E/AndroidRuntime(741):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
01-28 23:27:52.778: E/AndroidRuntime(741):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
01-28 23:27:52.778: E/AndroidRuntime(741):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
01-28 23:27:52.778: E/AndroidRuntime(741):    at mio.provaprogetto.LiukPresencesActivity.readTwitterFeed(LiukPresencesActivity.java:63)
01-28 23:27:52.778: E/AndroidRuntime(741):    at mio.provaprogetto.LiukPresencesActivity.onCreate(LiukPresencesActivity.java:37)
01-28 23:27:52.778: E/AndroidRuntime(741):    at android.app.Activity.performCreate(Activity.java:5008)
01-28 23:27:52.778: E/AndroidRuntime(741):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
01-28 23:27:52.778: E/AndroidRuntime(741):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
01-28 23:27:52.778: E/AndroidRuntime(741):    ... 11 more
01-28 23:27:55.619: I/Process(741): Sending signal. PID: 741 SIG: 9



Idee? ^__^

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:Leggere e scrivere su un dadabase
« Risposta #1 il: 29 Gennaio 2013, 07:51:11 CET »
0
Idee? ^__^

La ragione è scritta nel Logcat che hai postato.  :D

Citazione
01-28 23:27:52.778: E/AndroidRuntime(741): java.lang.RuntimeException: Unable to start activity ComponentInfo{mio.provaprogetto/mio.provaprogetto.LiukPresencesActivity}: android.os.NetworkOnMainThreadException
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Ray13

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Leggere e scrivere su un dadabase
« Risposta #2 il: 30 Gennaio 2013, 02:00:21 CET »
0
Grazie per la risp, ora si presenta un problema molto più ampio. Creare un AsynkTask giusto? XD

Ho un grande problema. Ovvero io ho questo codice:

ACTIVITY PRINCIPALE
Codice (Java): [Seleziona]
package mio.provaprogetto;

import java.util.Vector;

import org.json.JSONArray;
import org.json.JSONObject;
import mio.provaprogetto.R;
import android.os.Bundle;
import android.app.Activity;
import android.widget.ListView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;

public class LiukPresencesActivity extends Activity{
       
        private myAsynkTask myAsynkTask;
       
       
           /** Called when the activity is first created. */
           @Override
           public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
              ListView listView = (ListView) findViewById(R.id.mylist);
//             myAsynkTask = new myAsynkTask();        
//                      if(savedInstanceState==null){
//                      myAsynkTask.execute();
                       
              Vector v = new Vector();
             
              String readTwitterFeed = readTwitterFeed();
              try {
                 JSONArray jsonArray = new JSONArray(readTwitterFeed);
                 
                 for (int i = 0; i < jsonArray.length(); i++)
                 {
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    v.add(jsonArray.getJSONObject(i).getString("nome") +" "+ jsonArray.getJSONObject(i).getString("cognome"));
                 }
              } catch (Exception e) {
                 Toast.makeText(this, "Exception" + e,Toast.LENGTH_LONG).show();
                 e.printStackTrace();
              }
              ListAdapter listaContatti = new ArrayAdapter(this, android.R.layout.simple_list_item_1, v);
              listView.setAdapter(listaContatti);
             
             
              Toast.makeText(this, "END OF APPLICATION",Toast.LENGTH_LONG).show();
           } //end onCreate

           public String readTwitterFeed() {
              StringBuilder builder = new StringBuilder();
              HttpClient client = new DefaultHttpClient();
              HttpGet httpGet = new HttpGet("http://www.lasceltadelbenessere.it/valerio/prova2.php");
             
              try {
                 HttpResponse response = client.execute(httpGet);
                 StatusLine statusLine = response.getStatusLine();
                 int statusCode = statusLine.getStatusCode();
                 if (statusCode == 200) {
                   
                    HttpEntity entity = response.getEntity();
                    InputStream content = entity.getContent();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                    String line;
                    while ((line = reader.readLine()) != null)
                    {
                       
                       builder.append(line);
                    } //end while
                 } else {
                    Toast.makeText(this, "Failed to download file",Toast.LENGTH_LONG).show();
                 }
              } catch (ClientProtocolException e) {
                 e.printStackTrace();
              } catch (IOException e) {
                 e.printStackTrace();
              }
              return builder.toString();
           }
        }
Codice PHP chiamato:

Codice: [Seleziona]
<?php
// parametri del database
$db_host = "<mioHost>";
$db_user = "<mioUser>";
$db_password = "<miaPass>";
$db_name = "<mioDbName>";
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri...");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri...");
$q=mysql_query("SELECT * FROM <miaTabella>");
while($e=mysql_fetch_assoc($q))
        $output[]=$e;
print(json_encode($output));
mysql_close();
?>

E' semplice, io ho due parametri e li vorrei inserire in una ListView. Attualmente sono due stringhe dopo saranno 1 stringa e 1 int ma poco cambia. Ho provato a creare un AsynkTask ma non so quando riempire l'adapter. Ovvero se sposto le operazioni nel doInBackGround dell'asyncTask non so come portarmi il valore di  v ( il mio Vector) nell'activity principale per settare l'adapter.

Sempre se così devo procedere e non in un'altro modo.

Offline Ray13

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Leggere e scrivere su un dadabase
« Risposta #3 il: 30 Gennaio 2013, 13:56:30 CET »
0
Ho provato una cosa simile ma credo di sbagliare i parametri. é come se non mi passa dall'asynkTask al thread main il mio Vector V. Se provo a metterlo nei parametri mi dice che non è supportato.. non saprei

Codice (Java): [Seleziona]
public class LiukPresencesActivity extends Activity{
       
    Vector v = new Vector();
       
           /** Called when the activity is first created. */
           @Override
           public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
              ListView listView = (ListView) findViewById(R.id.mylist);
//             myAsynkTask = new myAsynkTask();        
//                      if(savedInstanceState==null){
//                      myAsynkTask.execute();
                       

             
                        LoadingStuffTask task = new LoadingStuffTask();
                        task.execute();
              ListAdapter listaContatti = new ArrayAdapter(this, android.R.layout.simple_list_item_1, v);
              listView.setAdapter(listaContatti);
             
//           
//            Toast.makeText(this, "END OF APPLICATION",Toast.LENGTH_LONG).show();
           } //end onCreate

           public String readTwitterFeed() {
              StringBuilder builder = new StringBuilder();
              HttpClient client = new DefaultHttpClient();
              HttpGet httpGet = new HttpGet("http://www.lasceltadelbenessere.it/valerio/prova2.php");
             
              try {
                 HttpResponse response = client.execute(httpGet);
                 StatusLine statusLine = response.getStatusLine();
                 int statusCode = statusLine.getStatusCode();
                 if (statusCode == 200) {
                   
                    HttpEntity entity = response.getEntity();
                    InputStream content = entity.getContent();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                    String line;
                    while ((line = reader.readLine()) != null)
                    {
                       
                       builder.append(line);
                    } //end while
                 } else {
                    Toast.makeText(this, "Failed to download file",Toast.LENGTH_LONG).show();
                 }
              } catch (ClientProtocolException e) {
                 e.printStackTrace();
              } catch (IOException e) {
                 e.printStackTrace();
              }
              return builder.toString();
           }
                private class LoadingStuffTask extends AsyncTask<Void, Void, Void> {
                // I tre tipi da dichiarare sono relativamente (in questo caso usiamo solo stringhe)
                // il parametro in entrata di doInBackground  (quando chiamiamo execute passiamo una stringa)
                // il paramentro in entrata di onProgressUpdate (dati che vogliamo mostrare all' utente -opzionale,potremmo usare variabili globali-)
                // il parametro in entrata di onPostExecure (una volta finito il task, potremmo voler mostrare un risultato all'utente)
                // nel caso non volessimo usare parametri di alcun genere tipizziamo con Void,Void,Void (passeremo poi dei null come parametri)


                        protected Void doInBackground(Void... params) {
                              String readTwitterFeed = readTwitterFeed();
                              try {
                                 JSONArray jsonArray = new JSONArray(readTwitterFeed);
                                 
                                 for (int i = 0; i < jsonArray.length(); i++)
                                 {
                                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                                    v.add(jsonArray.getJSONObject(i).getString("nome") +" "+ jsonArray.getJSONObject(i).getString("cognome"));
                                 }
                              } catch (Exception e) {
                                 Log.d("Qui", "Allarme!");
                                 e.printStackTrace();
                              }
                                return null;
                        }

                        protected void onProgressUpdate(Void... params) {
//                              loadingTv.append(values[0] + "\n");
                        }

                        protected void onPostExecute(Void... params) {
//                              loadingTv.append(result + "\n");
                        }



                }
}

Offline Ray13

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Leggere e scrivere su un dadabase
« Risposta #4 il: 31 Gennaio 2013, 14:21:53 CET »
0
Nessuna idea? ^__^

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Leggere e scrivere su un dadabase
« Risposta #5 il: 31 Gennaio 2013, 16:12:59 CET »
0
A partire da Android 3.0 non puoi eseguire operazioni di rete nel main Thread UI.
Quindi devi far eseguire la lettura in modo asincrono e uno dei metodi è l'AsyncTask.

L'argomento è decisamente vasto, e trovi su internet ampia documentazione.
Schematizzando un po il tuo caso

Codice (Java): [Seleziona]
           @Override
           public void onCreate(Bundle savedInstanceState) {
                 .......
                 new LoadingStuffTask().execute(....):

           }

private class LoadingStuffTask extends AsyncTask<.... ,...  , ... > {
     protected void doInBackground(....) {
         //qui esegui la lettura del feed
         //long-running code here
     }

     protected void onProgressUpdate(...) {
       
     }

     protected void onPostExecute(....) {
         //Qui aggiorni la lista
     }
 }

Poi un serie di considerazioni sul tuo codice:
Il metodo  readTwitterFeed() spostalo dentro la classe dell'AsyncTask.
In secondo luogo se vuoi far passare un parametro, devi specificarlo nell'execute e nella dichiarazione della classe dell'AsyncTask. Tu lo dichiari void, void, void, in questo modo è ovvio che il vector non passa.
Inoltre non è necessario passare indietro il vector. Aggiorna la lista direttamente dentro l'asyncTask. Tieni presente che il metodo onPostExecute è sincronizzato con l'UI Thread.
« Ultima modifica: 31 Gennaio 2013, 17:10:15 CET da GabMarioPower »

Offline Ray13

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Leggere e scrivere su un dadabase
« Risposta #6 il: 31 Gennaio 2013, 16:42:41 CET »
0
Prima di tutto grazie!

Ho seguito i tuoi consigli e a quanto ho capito quindi a me non serve passare nessun parametro ma semplicemente aggiornare l'adapter dal onPostExecute.

Ho fatto i seguenti cambiamenti e magia magia non mi visualizza la lista con i dati ma soprattutto non mi crasha. Non da errori nel log. Semplicemente non visualizza nulla se non la prima textView manuale. Secondo me c'è qualcosa che non va nell'adapter è che sono ancora alle prime armi e non so bene come far aggiornare l'adapter nel onPostExecute
Codice (Java): [Seleziona]
public class LiukPresencesActivity extends Activity{
    ListView listView;
    ListAdapter listaContatti;
    Vector v = new Vector();
       
           /** Called when the activity is first created. */
           @Override
           public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
             listView = (ListView) findViewById(R.id.mylist);

                        LoadingStuffTask task = new LoadingStuffTask();
                        task.execute();
                        ListAdapter listaContatti = new ArrayAdapter(this, android.R.layout.simple_list_item_1, v);
              listView.setAdapter(listaContatti);
             
//            
//            Toast.makeText(this, "END OF APPLICATION",Toast.LENGTH_LONG).show();
           } //end onCreate


                private class LoadingStuffTask extends AsyncTask<Void, Void, Void> {
                // I tre tipi da dichiarare sono relativamente (in questo caso usiamo solo stringhe)
                // il parametro in entrata di doInBackground  (quando chiamiamo execute passiamo una stringa)
                // il paramentro in entrata di onProgressUpdate (dati che vogliamo mostrare all' utente -opzionale,potremmo usare variabili globali-)
                // il parametro in entrata di onPostExecure (una volta finito il task, potremmo voler mostrare un risultato all'utente)
                // nel caso non volessimo usare parametri di alcun genere tipizziamo con Void,Void,Void (passeremo poi dei null come parametri)

                        protected Void doInBackground(Void... params) {
                              String readTwitterFeed = readTwitterFeed();
                              try {
                                 JSONArray jsonArray = new JSONArray(readTwitterFeed);
                                 
                                 for (int i = 0; i < jsonArray.length(); i++)
                                 {
                                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                                    v.add(jsonArray.getJSONObject(i).getString("nome") +" "+ jsonArray.getJSONObject(i).getString("cognome"));
                                 }
                              } catch (Exception e) {
                                 Log.d("Qui", "Allarme!");
                                 e.printStackTrace();
                              }
                                return null;
                        }

                        protected void onProgressUpdate(Void... params) {
                        }

                        protected void onPostExecute(Void... params) {
                            ArrayAdapter<String> adapter =
                                    new ArrayAdapter<String>(listView.getContext(),
                                        android.R.layout.simple_list_item_1,v);
                            listView.setAdapter(adapter);
                        }

                        public String readTwitterFeed() {
                            StringBuilder builder = new StringBuilder();
                            HttpClient client = new DefaultHttpClient();
                            HttpGet httpGet = new HttpGet("<mioLink>");
                           
                            try {
                               HttpResponse response = client.execute(httpGet);
                               StatusLine statusLine = response.getStatusLine();
                               int statusCode = statusLine.getStatusCode();
                               if (statusCode == 200) {
                                 
                                  HttpEntity entity = response.getEntity();
                                  InputStream content = entity.getContent();
                                  BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                                  String line;
                                  while ((line = reader.readLine()) != null)
                                  {
                                     
                                     builder.append(line);
                                  } //end while
                               } else {
//                                  Toast.makeText(this, "Failed to download file",Toast.LENGTH_LONG).show();
                               }
                            } catch (ClientProtocolException e) {
                               e.printStackTrace();
                            } catch (IOException e) {
                               e.printStackTrace();
                            }
                            return builder.toString();
                         }

                }
}


Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Leggere e scrivere su un dadabase
« Risposta #7 il: 31 Gennaio 2013, 17:09:21 CET »
0
     

Codice (Java): [Seleziona]
     protected Vector doInBackground(Void... params) {

          Vector v = new Vector();
           .......
          return v;
     }

     protected void onPostExecute(Vector v) {
           .....
    }

Quando termina doInBackgroung, il return del metodo viene passato come parametro al onPostExecute. In questo modo gli passi il vettore valorizzato.
Togli v dalla activity, e togli dall' onCreate()
         
Codice (Java): [Seleziona]
     ListAdapter listaContatti = new ArrayAdapter(this, android.R.layout.simple_list_item_1, v);
              listView.setAdapter(listaContatti);

Offline Ray13

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Leggere e scrivere su un dadabase
« Risposta #8 il: 31 Gennaio 2013, 17:45:16 CET »
0
Chiaro e perfetto. Risolto un po' di errore di parentesi e stupidaggini varie RISOLTO. Funziona e grazie.

Chiudo topic e posto il codice se servirà a qualcuno in futuro:

Codice (Java): [Seleziona]
public class LiukPresencesActivity extends Activity{
    ListView listView;
    ListAdapter listaContatti;

       
           /** Called when the activity is first created. */
           @Override
           public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
             listView = (ListView) findViewById(R.id.mylist);

                        LoadingStuffTask task = new LoadingStuffTask();
                        task.execute();
           }


                private class LoadingStuffTask extends AsyncTask<Void, Void, Vector> {


                        protected Vector doInBackground(Void... params) {
                            Vector v = new Vector();
                              String readTwitterFeed = readTwitterFeed();
                              try {
                                 JSONArray jsonArray = new JSONArray(readTwitterFeed);
                                 
                                 for (int i = 0; i < jsonArray.length(); i++)
                                 {
                                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                                    v.add(jsonArray.getJSONObject(i).getString("nome") +" "+ jsonArray.getJSONObject(i).getString("cognome"));
                                 }
                              } catch (Exception e) {
                                 Log.d("Qui", "Allarme!");
                                 e.printStackTrace();
                              }
                                return v;
                        }

                        protected void onProgressUpdate(Void... params) {
                        }

                        protected void onPostExecute(Vector v) {
                            ArrayAdapter<String> adapter =
                                    new ArrayAdapter(listView.getContext(),
                                        android.R.layout.simple_list_item_1,v);
                            listView.setAdapter(adapter);
                        }

                        public String readTwitterFeed() {
                            StringBuilder builder = new StringBuilder();
                            HttpClient client = new DefaultHttpClient();
                            HttpGet httpGet = new HttpGet("<mioLink>");
                           
                            try {
                               HttpResponse response = client.execute(httpGet);
                               StatusLine statusLine = response.getStatusLine();
                               int statusCode = statusLine.getStatusCode();
                               if (statusCode == 200) {
                                 
                                  HttpEntity entity = response.getEntity();
                                  InputStream content = entity.getContent();
                                  BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                                  String line;
                                  while ((line = reader.readLine()) != null)
                                  {
                                     
                                     builder.append(line);
                                  } //end while
                               } else {
                               }
                            } catch (ClientProtocolException e) {
                               e.printStackTrace();
                            } catch (IOException e) {
                               e.printStackTrace();
                            }
                            return builder.toString();
                         }




                }
}

Offline supernio

  • Nuovo arrivato
  • *
  • Post: 18
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Mac OS X 10.8
Re:Leggere e scrivere su un dadabase
« Risposta #9 il: 12 Aprile 2013, 13:48:23 CEST »
0
Salve mi ritrovo ad usare la classe Asynctask ma ho qualche problemino,il mio database è su altervista ed per prova l'ho solo popolato con 1 record per ora.Questa è la classe interessata:

Codice: [Seleziona]
public class Visualizza extends Activity{
    ListView listView;
    ListAdapter listaContatti;

       
           /** Called when the activity is first created. */
           @Override
           public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.visualizza);
             listView = (ListView) findViewById(R.id.listView1);

                        LoadingStuffTask task = new LoadingStuffTask();
                        task.execute();
           }


                private class LoadingStuffTask extends AsyncTask<Void, Void, Vector> {


                        protected Vector doInBackground(Void... params) {
                            Vector v = new Vector();
                              String readTwitterFeed = readTwitterFeed();
                              try {
                                  Log.d("Qui", "Allarme!");

                                 JSONArray jsonArray = new JSONArray(readTwitterFeed);
                                 
                                 for (int i = 0; i < jsonArray.length(); i++)
                                 {
                                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                                    v.add(jsonArray.getJSONObject(i).getString("ID") +" "+ jsonArray.getJSONObject(i).getString("Linea"));
                                 }
                              } catch (Exception e) {
                                 Log.d("Qui", "Allarme!");
                                 e.printStackTrace();
                              }
                                return v;
                        }

                        protected void onProgressUpdate(Void... params) {
                        }

                        protected void onPostExecute(Vector v) {
                            ArrayAdapter<String> adapter =
                                    new ArrayAdapter(listView.getContext(),
                                        android.R.layout.simple_list_item_1 ,v);
                            listView.setAdapter(adapter);
                        }

                        public String readTwitterFeed() {
                            StringBuilder builder = new StringBuilder();
                            HttpClient client = new DefaultHttpClient();
                            HttpGet httpGet = new HttpGet("http://xxxxxx.altervista.org/xxxxx.php");
                           
                            try {
                               HttpResponse response = client.execute(httpGet);
                               StatusLine statusLine = response.getStatusLine();
                               int statusCode = statusLine.getStatusCode();
                               if (statusCode == 200) {
                                 
                                  HttpEntity entity = response.getEntity();
                                  InputStream content = entity.getContent();
                                  BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                                  String line;
                                  while ((line = reader.readLine()) != null)
                                  {
                                     
                                     builder.append(line);
                                  } //end while
                               } else {
                               }
                            } catch (ClientProtocolException e) {
                               e.printStackTrace();
                            } catch (IOException e) {
                               e.printStackTrace();
                            }
                            return builder.toString();
                         }




                }
}

e questo è il logcat:

Codice: [Seleziona]
04-12 13:39:11.611: E/AndroidRuntime(20010): FATAL EXCEPTION: AsyncTask #1
04-12 13:39:11.611: E/AndroidRuntime(20010): java.lang.RuntimeException: An error occured while executing doInBackground()
04-12 13:39:11.611: E/AndroidRuntime(20010):         at android.os.AsyncTask$3.done(AsyncTask.java:299)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at java.lang.Thread.run(Thread.java:856)
04-12 13:39:11.611: E/AndroidRuntime(20010): Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at java.net.InetAddress.getAllByName(InetAddress.java:214)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at com.apmservice.Visualizza$LoadingStuffTask.readTwitterFeed(Visualizza.java:84)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at com.apmservice.Visualizza$LoadingStuffTask.doInBackground(Visualizza.java:50)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at com.apmservice.Visualizza$LoadingStuffTask.doInBackground(Visualizza.java:1)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-12 13:39:11.611: E/AndroidRuntime(20010):         ... 5 more
04-12 13:39:11.611: E/AndroidRuntime(20010): Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at libcore.io.Posix.getaddrinfo(Native Method)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
04-12 13:39:11.611: E/AndroidRuntime(20010):         at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
04-12 13:39:11.611: E/AndroidRuntime(20010):         ... 19 more
04-12 13:39:11.611: E/AndroidRuntime(20010): Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied)
04-12 13:39:11.611: E/AndroidRuntime(20010):         ... 22 more

Dopo aver premuto il bottone che mi riporta a questa activity l'app mi visualizza solo una mia textview e dopo qualche secondo crasha.
Scusate ma sono alle prime armi e non riesco a capire il problema.
« Ultima modifica: 12 Aprile 2013, 13:50:35 CEST da supernio »

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Leggere e scrivere su un dadabase
« Risposta #10 il: 12 Aprile 2013, 14:03:36 CEST »
0
Codice (Java): [Seleziona]
04-12 13:39:11.611: E/AndroidRuntime(20010): Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
Direi che il logcat è autoesplicativo.

Hai inserito nel manifest il tag che autorizza la tua applicazione ad accedere alla rete?
Codice (XML): [Seleziona]
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Offline supernio

  • Nuovo arrivato
  • *
  • Post: 18
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Mac OS X 10.8
Re:Leggere e scrivere su un dadabase
« Risposta #11 il: 12 Aprile 2013, 14:22:03 CEST »
0
Codice (Java): [Seleziona]
04-12 13:39:11.611: E/AndroidRuntime(20010): Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
Direi che il logcat è autoesplicativo.

Hai inserito nel manifest il tag che autorizza la tua applicazione ad accedere alla rete?
Codice (XML): [Seleziona]
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Ti ringrazio ho risolto, mi mancava il permesso nel manifest.

Post unito: 13 Aprile 2013, 03:21:37 CEST
Ho utilizzato questo codice per leggere dal mio database e va abbastanza bene, se dovessi invece fare una insert nel database con delle stringhe presenti nella mia app come dovrei fare? Grazie
« Ultima modifica: 13 Aprile 2013, 03:21:37 CEST da supernio, Reason: Merged DoublePost »