Autore Topic: DB remoto, JSON  (Letto 1402 volte)

Offline cha

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
DB remoto, JSON
« il: 06 Luglio 2011, 13:58:21 CEST »
0
Salve,
mi sono da poco avvicinata al mondo Android. Stavo provando come fare una query su un DB remoto ma mi va in eccezione dopo l'istruzione:
Codice: [Seleziona]
HttpResponse response = httpclient.execute(httppost);
ora vi posto il codice completo. E' un applicazione molto semplice che a partire da una tabella people vuole ottenere tutti i record che hanno il valore 'anno' > di 1987.

Script PHP:
Codice (PHP): [Seleziona]
<?php

$lh = "localhost";
$utente = "root";
$psw = "---------";
$db = "test";

$my_conn = mysql_connect($lh, $utente, $psw);
mysql_select_db($db, $my_conn);

$query = "INSERT INTO people2(name, sex, anno) VALUES ('ciao', '0', '1989')";
@mysql_query($query);

$q = mysql_query("select * from people2 where anno > '".$_REQUEST['anno']."'");

while($e = mysql_fetch_assoc($q))
        $output[] = $e;

print(json_encode($ouput));

mysql_close();
?>

Activity:

Codice (Java): [Seleziona]
package eser.db;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class JsonActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        //Pulsante esegui
        Button besegui = (Button) findViewById(R.id.besegui);
                besegui.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                               
                                String result = "";
                                InputStream is = null;
                                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                                nameValuePairs.add(new BasicNameValuePair("anno", "1987"));
                               
                                Toast.makeText(JsonActivity.this, "coppia inizializzata\n", Toast.LENGTH_SHORT).show();
                               
                                //POST
                                try{
                                        HttpClient httpclient = new DefaultHttpClient();
                                        HttpPost httppost = new HttpPost("http://localhost/nascite.php");
                                        Toast.makeText(JsonActivity.this, "String:\n"+httppost.toString(), Toast.LENGTH_LONG).show();
                                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                                        HttpResponse response = httpclient.execute(httppost);
                                        HttpEntity entity = response.getEntity();
                                        is = entity.getContent();
                                }catch(Exception e){
                                        //Toast.makeText(JsonActivity.this, "Eccezione POST\n", Toast.LENGTH_SHORT).show();
                                }
                               
                                //conversione della risposta in una stringa
                                try{
                                        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                                        StringBuilder sb = new StringBuilder();
                                        String line = null;
                                        while((line = reader.readLine()) != null){
                                                sb.append(line + "\n");
                                        }
                                        is.close();
                                       
                                        result = sb.toString();
                                }catch(Exception e){
                                        //Toast.makeText(JsonActivity.this, "Eccezione conversione\n", Toast.LENGTH_SHORT).show();
                                }
                               
                                //parse Json data
                                try{
                                        JSONArray jarray = new JSONArray(result);
                                        for(int i = 0; i<jarray.length(); i++){
                                                JSONObject json_data = jarray.getJSONObject(i);
                                                Toast.makeText(JsonActivity.this, "contenuto json_data "+json_data, Toast.LENGTH_SHORT).show();
                                        }
                                }catch(Exception e){
                                        //Toast.makeText(JsonActivity.this, "eccezione parse\n", Toast.LENGTH_SHORT).show();
                                }
                        }
                });
    }
}

e nel manifest ho messo il permesso per andare su internet.

Per quanto riguarda il logcat:

Codice: [Seleziona]
07-06 11:51:21.552: DEBUG/AndroidRuntime(701): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
07-06 11:51:21.564: DEBUG/AndroidRuntime(701): CheckJNI is ON
07-06 11:51:22.283: DEBUG/AndroidRuntime(701): --- registering native functions ---
07-06 11:51:23.364: DEBUG/ddm-heap(701): Got feature list request
07-06 11:51:24.533: DEBUG/AndroidRuntime(701): Shutting down VM
07-06 11:51:24.602: DEBUG/dalvikvm(701): DestroyJavaVM waiting for non-daemon threads to exit
07-06 11:51:24.674: DEBUG/dalvikvm(701): DestroyJavaVM shutting VM down
07-06 11:51:24.713: DEBUG/dalvikvm(701): HeapWorker thread shutting down
07-06 11:51:24.733: DEBUG/dalvikvm(701): HeapWorker thread has shut down
07-06 11:51:24.733: DEBUG/jdwp(701): JDWP shutting down net...
07-06 11:51:24.733: INFO/dalvikvm(701): Debugger has detached; object registry had 1 entries
07-06 11:51:24.763: DEBUG/dalvikvm(701): VM cleaning up
07-06 11:51:24.954: DEBUG/dalvikvm(701): LinearAlloc 0x0 used 628628 of 5242880 (11%)
07-06 11:51:26.723: DEBUG/AndroidRuntime(710): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
07-06 11:51:26.738: DEBUG/AndroidRuntime(710): CheckJNI is ON
07-06 11:51:27.362: DEBUG/AndroidRuntime(710): --- registering native functions ---
07-06 11:51:28.433: DEBUG/ddm-heap(710): Got feature list request
07-06 11:51:29.863: INFO/ActivityManager(60): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=eser.db/.JsonActivity }
07-06 11:51:30.252: DEBUG/AndroidRuntime(710): Shutting down VM
07-06 11:51:30.252: DEBUG/dalvikvm(710): DestroyJavaVM waiting for non-daemon threads to exit
07-06 11:51:30.282: DEBUG/dalvikvm(710): DestroyJavaVM shutting VM down
07-06 11:51:30.293: DEBUG/dalvikvm(710): HeapWorker thread shutting down
07-06 11:51:30.293: DEBUG/dalvikvm(710): HeapWorker thread has shut down
07-06 11:51:30.293: DEBUG/jdwp(710): JDWP shutting down net...
07-06 11:51:30.302: INFO/dalvikvm(710): Debugger has detached; object registry had 1 entries
07-06 11:51:30.313: DEBUG/dalvikvm(710): VM cleaning up
07-06 11:51:30.413: ERROR/AndroidRuntime(710): ERROR: thread attach failed
07-06 11:51:30.803: DEBUG/dalvikvm(710): LinearAlloc 0x0 used 638596 of 5242880 (12%)
07-06 11:51:32.063: INFO/ActivityManager(60): Displayed activity eser.db/.JsonActivity: 1705 ms (total 1705 ms)
07-06 11:51:32.436: ERROR/gralloc(60): [unregister] handle 0x48bd98 still locked (state=40000001)
07-06 11:51:37.463: DEBUG/dalvikvm(107): GC freed 166 objects / 7128 bytes in 308ms
07-06 11:51:44.003: INFO/NotificationService(60): enqueueToast pkg=eser.db callback=android.app.ITransientNotification$Stub$Proxy@44cacb48 duration=0
07-06 11:51:44.103: INFO/NotificationService(60): enqueueToast pkg=eser.db callback=android.app.ITransientNotification$Stub$Proxy@44cac558 duration=1

come target ho il level 7 con le google APIS.

Mi sapere dire il perchè dell'eccezione e in cosa sbaglio?

mi sono basata sul tutorial:
http://www.helloandroid.com/tutorials/connecting-mysql-database
come avevo già letto nei precedenti topic, ma non riesco a capire cmq dove sia l'errore.

Grazie

Offline Nicola_D

  • Moderatore
  • 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:DB remoto, JSON
« Risposta #1 il: 06 Luglio 2011, 14:21:14 CEST »
0
il problema è l'ip, localhost sarebbe il dispositivo android, ma te il server lo hai su pc. Devi indicare al posto di localhost l'ip del pc
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

Offline cha

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:DB remoto, JSON
« Risposta #2 il: 06 Luglio 2011, 14:35:08 CEST »
0
hai perfettamente ragione, infatti anche quando facevo il tutorial per le map con la telnet indicavo il localhost  :-[

ora però mi da errore sul Parse. Sinceramente è la prima volta che ho a che fare con JSON e con PHP non ho mai approfondito... quindi non so molto dove mettere le mani...Ti salta all'occhio niente?

Offline Nicola_D

  • Moderatore
  • 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:DB remoto, JSON
« Risposta #3 il: 06 Luglio 2011, 14:38:01 CEST »
0
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

Offline cha

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:DB remoto, JSON
« Risposta #4 il: 06 Luglio 2011, 14:42:01 CEST »
0
ti posto il logcat e intanto mi metto a leggere i link che mi hai passato! grazie per le dritte  :-)

Codice: [Seleziona]
07-06 12:40:26.153: DEBUG/AndroidRuntime(844): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
07-06 12:40:26.162: DEBUG/AndroidRuntime(844): CheckJNI is ON
07-06 12:40:26.803: DEBUG/AndroidRuntime(844): --- registering native functions ---
07-06 12:40:28.042: DEBUG/ddm-heap(844): Got feature list request
07-06 12:40:29.812: DEBUG/AndroidRuntime(844): Shutting down VM
07-06 12:40:29.822: DEBUG/dalvikvm(844): DestroyJavaVM waiting for non-daemon threads to exit
07-06 12:40:29.833: ERROR/AndroidRuntime(844): ERROR: thread attach failed
07-06 12:40:29.833: DEBUG/dalvikvm(844): DestroyJavaVM shutting VM down
07-06 12:40:29.853: DEBUG/dalvikvm(844): HeapWorker thread shutting down
07-06 12:40:29.863: DEBUG/dalvikvm(844): HeapWorker thread has shut down
07-06 12:40:29.863: DEBUG/jdwp(844): JDWP shutting down net...
07-06 12:40:29.863: INFO/dalvikvm(844): Debugger has detached; object registry had 1 entries
07-06 12:40:29.883: DEBUG/dalvikvm(844): VM cleaning up
07-06 12:40:30.063: DEBUG/dalvikvm(844): LinearAlloc 0x0 used 628628 of 5242880 (11%)
07-06 12:40:31.823: DEBUG/AndroidRuntime(852): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
07-06 12:40:31.843: DEBUG/AndroidRuntime(852): CheckJNI is ON
07-06 12:40:32.743: DEBUG/AndroidRuntime(852): --- registering native functions ---
07-06 12:40:35.764: INFO/ActivityManager(60): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=eser.db/.JsonActivity }
07-06 12:40:35.914: DEBUG/AndroidRuntime(852): Shutting down VM
07-06 12:40:35.914: DEBUG/dalvikvm(852): DestroyJavaVM waiting for non-daemon threads to exit
07-06 12:40:35.963: DEBUG/dalvikvm(852): DestroyJavaVM shutting VM down
07-06 12:40:35.963: DEBUG/dalvikvm(852): HeapWorker thread shutting down
07-06 12:40:35.973: DEBUG/dalvikvm(852): HeapWorker thread has shut down
07-06 12:40:35.973: DEBUG/jdwp(852): JDWP shutting down net...
07-06 12:40:35.973: INFO/dalvikvm(852): Debugger has detached; object registry had 1 entries
07-06 12:40:36.042: ERROR/AndroidRuntime(852): ERROR: thread attach failed
07-06 12:40:36.063: DEBUG/dalvikvm(852): VM cleaning up
07-06 12:40:36.554: DEBUG/dalvikvm(852): LinearAlloc 0x0 used 637524 of 5242880 (12%)
07-06 12:40:38.923: INFO/ActivityManager(60): Displayed activity eser.db/.JsonActivity: 2834 ms (total 2834 ms)
07-06 12:40:39.302: ERROR/gralloc(60): [unregister] handle 0x4bb600 still locked (state=40000001)
07-06 12:40:45.233: DEBUG/dalvikvm(107): GC freed 242 objects / 11040 bytes in 519ms
07-06 12:41:17.812: INFO/NotificationService(60): enqueueToast pkg=eser.db callback=android.app.ITransientNotification$Stub$Proxy@44c190f0 duration=0
07-06 12:41:17.892: INFO/NotificationService(60): enqueueToast pkg=eser.db callback=android.app.ITransientNotification$Stub$Proxy@44e89990 duration=1
07-06 12:41:18.203: INFO/NotificationService(60): enqueueToast pkg=eser.db callback=android.app.ITransientNotification$Stub$Proxy@44c185d0 duration=1
07-06 12:41:18.273: INFO/global(819): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
07-06 12:41:18.483: INFO/NotificationService(60): enqueueToast pkg=eser.db callback=android.app.ITransientNotification$Stub$Proxy@44c16ad8 duration=0

Offline cha

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:DB remoto, JSON
« Risposta #5 il: 06 Luglio 2011, 15:42:47 CEST »
0
ho letto i link e ho trovato molto interessante il metodo getString(). Per l'altro spero di riuscire a risolvere senza far uso della libreria Gson, non dovrebbe essere necessaria da ciò che ho capito.
Cmq sia non riesco a risolvere il mio problema. Ho capito però un paio di cose:
1. nel file PHP avevo fatto un errore di battitura, ovvero:
Codice (PHP): [Seleziona]
print(json_encode($output));
2. l'istruzione che dà eccezione è subito:
Codice (Java): [Seleziona]
JSONArray jarray = new JSONArray(result);
quindi è il result che è sbagliato? come faccio a verificarlo?
so che il codice php viene eseguito [per verificarlo ho messo anche una insert nel codice php e ho visto che viene eseguita]

Offline cha

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:DB remoto, JSON
« Risposta #6 il: 07 Luglio 2011, 18:27:52 CEST »
0
ho risolto. Il problema era che avevo una versione di PHP precedente alla 5.2 quindi dovevo aggiungere il JSON -.-
 :-) :-) :-) :-)