Autore Topic: android php mysql inserimenti dati  (Letto 517 volte)

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
android php mysql inserimenti dati
« il: 03 Agosto 2015, 22:30:01 CEST »
0
Ciao a tutti!

in questo periodo stò studiando come connettermi ad un server locale con android ed inserire dati in un db.

Dopo tante guide ho creato uno script dove mi connetto ad un server locale ed inserisco i dati ma mi esce un errore "invalid ip adress"

questo è il codice php dove mi consente di connettere al db ed inserire i dati:
Codice (Java): [Seleziona]
<?php
        $host='127.0.0.1';
        $uname='root';
        $pwd='';
        $db="androidmysql";

        $con = mysql_connect($host,$uname,$pwd) or die("connection failed");
        mysql_select_db($db,$con) or die("db selection failed");
         
        $id=$_REQUEST['id'];
        $nome=$_REQUEST['nome'];
        $cognome=$_REQUEST['cognome'];
        $message=$_REQUEST['message'];

        $flag['code']=0;

        if($r=mysql_query("insert into persone values('$id','$nome', '$cognome', '$message') ",$con))
        {
                $flag['code']=1;
                echo"hi";
        }

        print(json_encode($flag));
        mysql_close($con);
?>

questo è il codice android dove dovrei connettermi ad internet ed inserire i dati:
Codice (Java): [Seleziona]
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.JSONObject;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends Activity {

        String idString, nomeString, cognomeString, messageString;
        InputStream is=null;
        String result=null;
        String line=null;
        int code;
       
        EditText e_id, e_nome, e_cognome, e_message;
        Button btn_insert;
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        e_id = (EditText) findViewById(R.id.inputId);
        e_nome = (EditText) findViewById(R.id.inputNome);
        e_cognome = (EditText) findViewById(R.id.inputCognome);
        e_message = (EditText) findViewById(R.id.inputMessaggio);    
        btn_insert = (Button) findViewById(R.id.btnInsert);
       
        btn_insert.setOnClickListener(new View.OnClickListener() {
                       
                @Override
                public void onClick(View v) {
                        // TODO Auto-generated method stub
                               
                        idString = e_id.getText().toString();
                        nomeString = e_nome.getText().toString();
                        cognomeString = e_cognome.getText().toString();
                        messageString = e_message.getText().toString();
                       
                        insert();
                }
        });
    }
 
    public void insert()
    {
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
 
                nameValuePairs.add(new BasicNameValuePair("id",idString));
                nameValuePairs.add(new BasicNameValuePair("nome",nomeString));
                nameValuePairs.add(new BasicNameValuePair("cognome",cognomeString));
                nameValuePairs.add(new BasicNameValuePair("message",messageString));
        try
        {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://10.0.2.2/prova/insert.php");
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
                Log.e("pass 1", "connection success ");
        }
        catch(Exception e)
        {
                Log.e("Fail 1", e.toString());
                Toast.makeText(getApplicationContext(), "Invalid IP Address",Toast.LENGTH_LONG).show();
        }    
       
        try {
            BufferedReader reader = new BufferedReader
                        (new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();
            Log.e("pass 2", "connection success ");
        }
        catch(Exception e) {
            Log.e("Fail 2", e.toString());
        }    
       
                try {
                        JSONObject json_data = new JSONObject(result);
                code=(json_data.getInt("code"));
                               
                if(code==1) {
                        Toast.makeText(getBaseContext(), "Inserted Successfully", Toast.LENGTH_SHORT).show();
                } else {
                        Toast.makeText(getBaseContext(), "Sorry, Try Again", Toast.LENGTH_LONG).show();
                }
                } catch(Exception e){
                        Log.e("Fail 3", e.toString());
                }
    }
   
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }    
}

l'errore che mi esce è:
"Invalid IP Address"

non riesco a capire il perchè!

help!
tutti possiamo programmare...basta volerlo!!!

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:android php mysql inserimenti dati
« Risposta #1 il: 04 Agosto 2015, 00:03:18 CEST »
0
il web server è sulla stessa macchina in cui fai il debug ? il debug lo fai con l'emulatore o hai un dispositivo connesso ?

Post unito: 04 Agosto 2015, 00:04:56 CEST
aggiungo anche che
Codice (Java): [Seleziona]
public void insert()
andrebbe inserito in un Asyntask , altrimenti l'app si blocca... anzi dovrebbe darti proprio errore in compilazione ...
« Ultima modifica: 04 Agosto 2015, 00:04:56 CEST da pietroconti89, Reason: Merged DoublePost »

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:android php mysql inserimenti dati
« Risposta #2 il: 04 Agosto 2015, 12:56:58 CEST »
0
ho cambiato totalmente codice!!

ma il problema è sempre lo stesso!

come server locale stò usando xampp e ho creato una cartella android_connect dove ho inserito 3 codici php che mi dovrebbero far inserire i dati.
questi sono i cod.

config.php

Codice (Java): [Seleziona]
<?php

define('DB_USER', "root"); // db user (xampp default root)
define('DB_PASSWORD', ""); // db password (normally null in xampp)
define('DB_DATABASE', "android_mysql"); // database name
define('DB_SERVER', "localhost"); // db server

?>

connect.php

Codice (Java): [Seleziona]
<?php

class DB_CONNECT {
        // constructor
        function __construct() {
                // connecting to database
                $this->connect();
        }
        // destructor
        function __destruct() {
                // closing db connection
                $this->close();
        }
        /**
        * Function to connect with database
        */

        function connect() {
                // import database connection variables
                require_once __DIR__ . '/config.php';
                // Connecting to mysql database
                $con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysql_error());
                // Selecing database
                $db = mysql_select_db(DB_DATABASE) or die(mysql_error()) or die(mysql_error());
                // returing connection cursor return $con;
        }
        /**
        * Function to close db connection
        */

        function close() {
                // closing db connection
                mysql_close();
        }
}

?>

insert.php

Codice (Java): [Seleziona]
<?php

/*
* Following code will create a new product row
* All product details are read from HTTP GET Request
*/


// array for JSON response
$response = array();
// check for required fields
if (isset($_GET['nome'])  && isset($_GET['cognome']) && isset($_GET['messaggio'])) {
        $nome = $_GET['nome'];
        $cognome = $_GET['cognome'];
        $messaggio = $_GET['messaggio'];
        // include db connect class
        require_once __DIR__ . '/connect.php';
        // connecting to db
        $db = new DB_CONNECT();
        // mysql inserting a new row (idioms)
        $result = mysql_query("INSERT INTO persone(nome, cognome, messaggio) VALUES('$nome', '$cognome', '$messaggio')");
        // check if row inserted or not
        if ($result) {
                // successfully inserted into database
                $response["success"] = 1;
                $response["message"] = "new IDIOM saved....";
                // echoing JSON response
                echo json_encode($response);
        } else {
                // failed to insert row
                $response["success"] = 0;
                $response["message"] = "Oops! An error occurred.";
                // echoing JSON response
                echo json_encode($response);
        }
} else {
// required field is missing
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
// echoing JSON response
echo json_encode($response);
}

?>

mentre come codice android ho:

JSONParser

Codice (Java): [Seleziona]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;

public class JSONParser {
        static InputStream is = null;
        static JSONObject jObj = null;
        static String json = "";
        // constructor
        public JSONParser() {
        }      
        // function get json from url
        // by making HTTP POST or GET mehtod
        public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) {
                // Making HTTP request
                try { // check for request method
                        if(method == "POST"){
                                // request method is POST
                                // defaultHttpClient
                                DefaultHttpClient httpClient = new DefaultHttpClient();
                                HttpPost httpPost = new HttpPost(url);
                                httpPost.setEntity(new UrlEncodedFormEntity(params));
                                HttpResponse httpResponse = httpClient.execute(httpPost);
                                HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent();
                        }else if(method == "GET"){
                                // request method is GET
                                DefaultHttpClient httpClient = new DefaultHttpClient();
                                String paramString = URLEncodedUtils.format(params, "utf-8");
                                url += "?" + paramString; HttpGet httpGet = new HttpGet(url);
                                HttpResponse httpResponse = httpClient.execute(httpGet);
                                HttpEntity httpEntity = httpResponse.getEntity();
                                is = httpEntity.getContent();
                        }
                } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                } catch (ClientProtocolException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                } try {
                        BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8);
                        StringBuilder sb = new StringBuilder();
                        String line = null;
                        while ((line = reader.readLine()) != null) {
                                sb.append(line + "\n");
                        }
                        is.close();
                        json = sb.toString();
                } catch (Exception e) {
                        Log.e("Buffer Error", "Error converting result " + e.toString());
                }
                // try parse the string to a JSON object
                try {
                        jObj = new JSONObject(json);
                } catch (JSONException e) {
                        Log.e("JSON Parser", "Error parsing data " + e.toString());
                }
                // return JSON String
                return jObj;                                   
               
        }
}

ed il MainActivity:

Codice (Java): [Seleziona]
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View.OnClickListener;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
        // Progress Dialog
        private ProgressDialog pDialog;
        JSONParser jsonParser = new JSONParser();
        private EditText e_nome, e_cognome, e_messaggio;
        private Button btn_insert;
        private int success;

        private static String url_insert_new = "http://10.0.2.2/android_connect/insert.php";
        // JSON Node names
        private static final String TAG_SUCCESS = "success";
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                // Edit Text
                e_nome = (EditText) findViewById(R.id.inputNome);
                e_cognome = (EditText) findViewById(R.id.inputCognome);
                e_messaggio = (EditText) findViewById(R.id.inputMessage);
                // Save button
                btn_insert = (Button) findViewById(R.id.btn_insert);
                // button click event
                btn_insert.setOnClickListener(this);
        }
        @Override
        public void onClick(View v) {
                if (v.getId()==R.id.btn_insert){
                        //call the Insert NewIdiom thread
                        new InsertNewIdiom().execute();
                        if (success==1){
                                Toast.makeText(getApplicationContext(), "Salvato...", Toast.LENGTH_LONG).show();
                        }else{
                                Toast.makeText(getApplicationContext(), "Non Salvato...", Toast.LENGTH_LONG).show();
                        }
                }

        }        
        //Background Async Task to Create new Idioms
                   
        class InsertNewIdiom extends AsyncTask<String, String, String> {
                //capture values from EditText
                String nomeString = e_nome.getText().toString();
                String cognomeString = e_cognome.getText().toString();
                String messaggioString = e_messaggio.getText().toString();
               
               
                /**
                 *  Before starting background thread Show Progress Dialog  
                 *  */

                @Override
                protected void onPreExecute() {
                        super.onPreExecute();
                        pDialog = new ProgressDialog(MainActivity.this);
                        pDialog.setMessage("Saving the new IDIOM");
                        pDialog.setIndeterminate(false);
                        pDialog.setCancelable(true);
                        pDialog.show();
                }
                         
                /**
                 *  Inserting the new idiom  
                 *  */

                protected String doInBackground(String... args) {
                        // Building Parameters
                        List<NameValuePair> params = new ArrayList<NameValuePair>();
                        params.add(new BasicNameValuePair("nome", nomeString));
                        params.add(new BasicNameValuePair("cognome", cognomeString));
                        params.add(new BasicNameValuePair("messaggio", messaggioString));
                        // getting JSON Object
                        // Note that create product url accepts GET method
                        JSONObject json = jsonParser.makeHttpRequest(url_insert_new, "GET", params);
                        // check log cat from response
                        Log.d("Insert New Idiom Response", json.toString());
                        // check for success tag
                        try {
                                success = json.getInt(TAG_SUCCESS);
                                if (success == 1) {
                                        // successfully save new idiom
                                } else {
                                        // failed to add new idiom
                                }
                        } catch (JSONException e) {
                                e.printStackTrace();  
                        }      
                        //return null;
                        return null;
                }
                /**
                 *  After completing background task Dismiss the progress dialog *
                 *  
                 **/

                protected void onPostExecute(String file_url) {
                        // dismiss the dialog once done
                        pDialog.dismiss();
                }
        }
}

stò fermo da 2 giorni!! non riesco a risolvere!!!

tutti possiamo programmare...basta volerlo!!!

Offline LonelyWolf

  • Utente junior
  • **
  • Post: 148
  • Respect: +12
    • Mostra profilo
    • Traversate dei laghi
  • Dispositivo Android:
    GT-I9505, ALE-L21
  • Sistema operativo:
    Windows 7 32/64
Re:android php mysql inserimenti dati
« Risposta #3 il: 04 Agosto 2015, 14:12:47 CEST »
0
Controlli di base:
server http attivo
server mysql attivo
firewall della macchina che fa da server correttamente configurato (o disattivato)
macchina server sulla stessa rete del dispositivo (o gateway configurato correttamente)

Fai un test direttamente sulla macchina server se la pagina php inserisce i dati correttamente.

L'errore "Invalid IP Address" chi lo restituisce?
Se la mia risposta ti è utile, per favore un thanks!

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:android php mysql inserimenti dati
« Risposta #4 il: 04 Agosto 2015, 19:41:48 CEST »
0
Ciao , non serve cambiare codice o comunque non ancore , il problema sembra semplicemente di connessione , quindi verifica prima che il server funzioni correttamente , il modo più veloce è , avvia lemulatore , avvia il browser e vai da l' li a lindirizzo
Codice: [Seleziona]
http://10.0.2.2/android_connect/insert.php
vedi se ti risponde , se già li non ti risponde allora è inutile continuare con diversi metodi di connessione, è evidente che il web server non è raggiungibile secondo quell 'indirizzo  ,
primo quesito
usi come indirizzo
10.0.2.2 perche fai il debug da emulatore ?
e quindi xampp è installato sulla stessa macchina in cui è presente l'emulatore ? se già cosi non fosse , bisogna che metti il giusto indirizzo ip
, e quindi usare il giusto indirizzo locale 192.168.0.* o quello che sia ,

secondo
xampp è configurato correttamente ?, se provi a collegartici da pc è raggiungibile? , se cosi non fosse rivedi la configurazione

terzo
diciamo che da emulatore riesci tramite il browser a raggiungere la destinazione, quindi il tutto è configurato per il meglio , prima domanda , nel manifet hai correttamente messo i permessi di Connessione ?

, fai questi primi passi prima di provare altri metodi  :-P

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:android php mysql inserimenti dati
« Risposta #5 il: 04 Agosto 2015, 22:24:40 CEST »
0
ciao pietro!!

grazie mille! sei stato preciso!

il problema era nella connessione!
dovevo sostituire il 10.0.2.2 con 192.168.0.*

per il momento va vene! ma il mio obbiettivo è quello di connettermi ad un mysql di internet.

c'è una guida completa sulla connessione mysql non locale?


grazie ancora a tutti!!
tutti possiamo programmare...basta volerlo!!!

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:android php mysql inserimenti dati
« Risposta #6 il: 04 Agosto 2015, 22:32:47 CEST »
0
il sorgente è quello che già usi , dovrai solo cambiare l' indirizzo con il link del sito ,
per cui se già disponi di un dominio online con database ecc , puoi andare avanti mettendo il link del sito , altrimenti devi iniziare con il registrare il tuo dominio online ;-)

Offline paul78

  • Utente normale
  • ***
  • Post: 359
  • Respect: +1
    • Mostra profilo
    • Android Code
  • Sistema operativo:
    Linux - Windows
Re:android php mysql inserimenti dati
« Risposta #7 il: 05 Agosto 2015, 09:08:43 CEST »
0
grazie!!!
tutti possiamo programmare...basta volerlo!!!