Autore Topic: Sviluppare un Form  (Letto 456 volte)

Offline Fenicexx

  • Nuovo arrivato
  • *
  • Post: 25
  • Respect: 0
    • Mostra profilo
Sviluppare un Form
« il: 31 Luglio 2014, 17:51:43 CEST »
0
Ciao,

devo creare un form, dove vengono presi alcuni dati dall'utente tramite edittext, radiobutton, etc.. per poi inviare il tutto tramite un solo bottone su un db mysql.

Ho pensato di fare l'inverso della lettura di un db, sfruttando il formato json, ho scritto lo script e sono riuscito a far scrivere un record, ma questo è sempre vuoto.

In generale, mi sapreste consigliare delle guide sullo sviluppo di form con input dell'utente e invio dati in formato json su un db?

Grazie

Offline Vincenzoz

  • Utente junior
  • **
  • Post: 122
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    Vincenzo Cimino
  • Sistema operativo:
    Windows 7
Re:Sviluppare un Form
« Risposta #1 il: 31 Luglio 2014, 18:18:51 CEST »
0
Vincenzo Cimino @ Google Play Store


Offline Fenicexx

  • Nuovo arrivato
  • *
  • Post: 25
  • Respect: 0
    • Mostra profilo
Re:Sviluppare un Form
« Risposta #2 il: 08 Agosto 2014, 17:39:55 CEST »
0
Grazie mille per la risposta. Alla fine ho trovato questa guida che è più vicina alle mie esigenze: http://blog.kerul.net/2014/04/insert-new-record-on-android-online.html

Però mi fallisce l'inserimento nel db.

L'errore nel logcat è:

Codice: [Seleziona]
08-08 17:29:06.767: E/SensorManager(19004): thread start

Lo script principale che si occupa dell'inserimento è questo:

Codice: [Seleziona]
<?php
//insertnew.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'])) {

$nome = $_GET['nome'];
$cognome = $_GET['cognome'];
 
// include db connect class
require_once 'connect.php';

// connecting to db

$db = new DB_CONNECT();
// mysql inserting a new row (idioms)

$result = mysql_query("INSERT INTO awo6i_test(nome, cognome) VALUES('$nome', '$cognome')");
// 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);
}
?>

La classe invece è questa:
Codice: [Seleziona]
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View.OnClickListener;
import it.hs.test.network.JSONParser;

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 Prenotation extends Activity implements OnClickListener {
        // Progress Dialog
        JSONParser jsonParser = new JSONParser();
        private EditText txtnewidiom;
        private EditText txtmeaning;
        private Button btnsavenew;
        private int success;
        //to determine JSON signal insert success/fail
        // url to insert new idiom (change accordingly)
        private static String url_insert_new = "http://www.miaurl.it/script/insert.php";
        // JSON Node names
        private static final String TAG_SUCCESS = "success";
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.prenotation);
                // Edit Text
                txtnewidiom = (EditText) findViewById(R.id.edit_name);
                txtmeaning = (EditText) findViewById(R.id.edit_lastname);
                // Save button
                btnsavenew = (Button) findViewById(R.id.form_button);
                // button click event
                btnsavenew.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
                if (v.getId()==R.id.form_button){
                        //call the InsertNewIdiom thread
                        new InsertNewIdiom().execute();
                        if (success==1){
                                Toast.makeText(getApplicationContext(), "Nuovo record salvato...", Toast.LENGTH_LONG).show();
                        }else{
                                Toast.makeText(getApplicationContext(), "Fallito!!", Toast.LENGTH_LONG).show();
                        }
                }
        }
       

        class InsertNewIdiom extends AsyncTask<String, String, String> {

                //capture values from EditText

                String nome = txtnewidiom.getText().toString();
                String cognome = txtmeaning.getText().toString();
               

                @Override
                protected void onPreExecute() {
                        super.onPreExecute();
                }

                /** * Inserisco nuovo record * */

                protected String doInBackground(String... args) {
                        // Building Parameters

                        List<NameValuePair> params = new ArrayList<NameValuePair>();
                        params.add(new BasicNameValuePair("nome", nome));
                        params.add(new BasicNameValuePair("cognome", cognome));
                        // 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;
                }
                /** * After completing background task Dismiss the progress dialog * **/

                protected void onPostExecute(String file_url) {
                }
        }
}

Dall'app inserisco i dati nelle edittext, clicco sul button e viene fuori il messaggio "Fallito!!", controllando poi la tabella nel DB ovviamente non viene inserito il nuovo record.

Qualche idea??

Grazie

Offline Vincenzoz

  • Utente junior
  • **
  • Post: 122
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    Vincenzo Cimino
  • Sistema operativo:
    Windows 7
Re:Sviluppare un Form
« Risposta #3 il: 09 Agosto 2014, 11:27:42 CEST »
0
L'errore nel logcat è:

Codice: [Seleziona]
08-08 17:29:06.767: E/SensorManager(19004): thread start

Non è propriamente un errore, è un avvertimento ma che in alcuni dispositivi viene segnato come errore, e in altri invece un semplice avvertimento.

Citazione
Dall'app inserisco i dati nelle edittext, clicco sul button e viene fuori il messaggio "Fallito!!", controllando poi la tabella nel DB ovviamente non viene inserito il nuovo record.

E che valore esce fuori, dalla variabile "success"? Sia nell'asynctask, che nell'onclick?
Vincenzo Cimino @ Google Play Store