2016-04-26 10 views
0

Ich habe diesen Code, der gut für mich funktioniert, und gibt mir Zugriff auf die Datenbank. das einzige Problem ist, dass ich Nachrichten, Toasts oder etwas hinzufügen möchte, um die Fehler im Falle des doppelten Primärschlüsselwertes anzuzeigen ...Fügen Sie Toasts in Abhängigkeit von Json-Antwort hinzu

Ist hier der Code meiner asyncTask (ich fügte den Toast hinzu, aber es tat nicht arbeiten :()

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 
} 

Hier ist der Code meiner php add_user Datei ist: ...........

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

Könnt ihr mir sagen, was kann ich tun? Wenn es verschiedene Möglichkeiten gibt, dasselbe zu tun, würde ich sie gerne ausprobieren: D

+0

die json kann null sein, so, wenn Ihr versucht, es zu analysieren, wird es zu Ihren Fang gehen und dort kann man einen Toast setzen –

+0

ich Ihnen für Ihre reponse danken aber, Was kann ich hinzufügen, um einen Fehler zu bekommen, wenn der Benutzer einen Wert des Primärschlüssels (Pseudo) hinzufügt, der bereits existiert? – AbdallahJg

+0

so ist es nicht Teil auf Ihrem Android-Code jetzt, es ist auf dem PHP-Teil jetzt –

Antwort

0

Sie können ui nicht aus Hintergrundthread berühren. Um Toast anzuzeigen, müssen Sie die Methode run on ui thread verwenden. Oder verwenden Sie die Fortschrittsmethode der asynchronen Task. Und für Nullwerte halten Sie Kontrollen. Wenn dieser Fall auch in Ausnahmefällen geht und möglicherweise möglich ist, kann es zu einem Absturz der App kommen.

0

Sie versuchen, einen Toast innerhalb der doInBackground-Methode zu erstellen, aber Sie können dies offensichtlich nicht tun, da doInBackground von Hintergrundthread aufgerufen wird. Toast kann nur im UI-Thread erstellt werden. Also, was ich vorschlagen würde, ist die Server-Antwort und Toasts-Erstellung in der onPostExecute-Methode, die im UI-Thread ausgeführt wird. Sie können folgendes tun:

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; } 
} 

diese Klasse erstellen Sie das JSON-Objekt Sie von Server und „file_url“ String erhalten zu speichern (was ich weiß nicht, wie es genau zu OnPostExecute übergeben wird) und es OnPostExecute passieren. Also, doInBackground und OnPostExecute kann wie folgt aussehen:

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(); 
    } 
    } 
Verwandte Themen