简体   繁体   中英

Add Toasts depending on Json reponse

i have this code wich works fine for me , and gives me access to database . the only problem is that i want to add messages , Toasts , or something to display the errors in case of duplicated primary key value ...

Here is the code of my asyncTask ( i added the Toast but it didn't work :( )

Button con=(Button)findViewById(R.id.inscription);
con.setOnClickListener(new OnClickListener() {
    public void onClick(View v){
        new CreateNewUser().execute();
        }
    });
}

class CreateNewUser extends AsyncTask<String, String, String> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

protected String doInBackground(String... args) {
    @SuppressWarnings("deprecation")
    Date d=new Date(an-2800,mn,jn);
    Date d1=new Date(ap-2800,mp,jp);
    String datenaiss=d.toString();
    String deliv=d1.toString(); 
    EditText pseud=(EditText) findViewById(R.id.pseud);
    String pseudo = pseud.getText().toString();
    EditText name=(EditText) findViewById(R.id.nom);
    String nom = name.getText().toString();
    EditText prenom=(EditText) findViewById(R.id.pren);
    String pren =prenom.getText().toString();
    EditText cinn=(EditText) findViewById(R.id.cin);
    String cin = cinn.getText().toString();
    EditText ag=(EditText) findViewById(R.id.age);
    String age = ag.getText().toString();
    EditText tele=(EditText) findViewById(R.id.tel);
    String tel = tele.getText().toString();
    EditText mail=(EditText) findViewById(R.id.email);
    String email = mail.getText().toString();
    EditText adress=(EditText) findViewById(R.id.adresse);
    String adresse = adress.getText().toString();
    EditText motdp=(EditText) findViewById(R.id.pwd);
    String pwd = motdp.getText().toString();
    EditText vill=(EditText) findViewById(R.id.ville);
    String ville = vill.getText().toString();
    EditText numpermi=(EditText) findViewById(R.id.numperm);
    String numperm = numpermi.getText().toString();         
    String x="http://192.168.1.5/add_user.php";
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("pseudo", pseudo));
    params.add(new BasicNameValuePair("mdp", pwd));
    params.add(new BasicNameValuePair("datenaiss", datenaiss));
    params.add(new BasicNameValuePair("deliv", deliv));
    params.add(new BasicNameValuePair("nom", nom));
    params.add(new BasicNameValuePair("prenom", pren));
    params.add(new BasicNameValuePair("cin", cin));
    params.add(new BasicNameValuePair("age", age));
    params.add(new BasicNameValuePair("tel", tel));
    params.add(new BasicNameValuePair("email", email));
    params.add(new BasicNameValuePair("adresse", adresse));
    params.add(new BasicNameValuePair("ville", ville));
    params.add(new BasicNameValuePair("numperm", numperm));
    JSONObject json;

    try {
        json = jsonParser.makeHttpRequest(x,"POST", params);
        Log.d("Create Response", json.toString());
        try {
            int success = json.getInt(TAG_SUCCESS);
            if (success == 1) {
                Toast.makeText(MainActivity.this,"Ajouté avec succés", Toast.LENGTH_LONG).show();}
            else
                Toast.makeText(getBaseContext(),"echec",Toast.LENGTH_LONG).show();}
        catch(JSONException e) {
            e.printStackTrace();
        }

    } catch (JSONException e1) {
    // TODO Auto-generated catch block
        e1.printStackTrace();
    }

// check log cat fro response
return null;}
protected void onPostExecute(String file_url) {
     // dismiss the dialog once done
}

Here is the code of my php add_user file : ...........

// mysql inserting a new row
$result = mysql_query("INSERT INTO utilisateur VALUES('$pseudo', '$mdp', '$nom', '$prenom','$cin', '$datenaiss', '$tel', '$email', '$adresse', '$ville', '$numperm', '$deliv')");

// check if row inserted or not
if ($result) {
    // successfully inserted into database
    $response["success"] = 1;
    $response["message"] = "Product successfully created.";

    // 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);
}
}?>

Can you guys tell me what can i do ? if there are different ways to do the same thing i'd love to try them :D

You can't touch ui from background thread. To display Toast you have to use run on ui thread method. Or use on progress update method of async task. And for null values keep checks. If that case also it will go in exception and might be possible it can crash app.

you are trying to create a Toast inside on doInBackground method, but you obviously cannot do this because doInBackground is called from background thread. Toasts can only be created in UI thread. So, what i would suggest is to handle your server response and Toasts creation inside onPostExecute method which is executed inside UI thread. You can do the following:

class MyCystomObject {

  private JSONObject json;
  private String file_url;

 public MyCystomObject(JSONObject json, String file_url) {
   this.json = json;
   this.file_url = file_url;
 }

 public void setJson(JSONObject json) { this.json = json; }

 public void setFile_url(String file_url) { this.file_url = file_url; }

 public JSONObject getJson() { return json; }

 public String getFile_url() { return file_url; }
}  

create this class to save the JSON object you receive from server and "file_url" String (which i do not know how it is exactly passed to onPostExecute) and pass it to onPostExecute. So, doInBackground and onPostExecute can look like:

  protected String doInBackground(String... args) {

    ....
    JSONObject json;
    MyCystomObject myCystomObject;

    json = jsonParser.makeHttpRequest(x,"POST", params);
    Log.d("Create Response", json.toString());

    myCystomObject = new MyCustomObject(json, your_file_url);

    return myCystomObject; 
  }



  protected void onPostExecute(MyCystomObject myCystomObject) {
      // here you can handle the responce you receive from server and display the appropriate toast message...
       JSONObject json = myCustomObject.getJson();
      try {
        int success = json.getInt(TAG_SUCCESS);
        if (success == 1) {
            Toast.makeText(MainActivity.this,"Ajouté avec succés", Toast.LENGTH_LONG).show();}
        else
            Toast.makeText(getBaseContext(),"echec",Toast.LENGTH_LONG).show();}
    catch(JSONException e) {
        e.printStackTrace();
    }
  }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM