2016-04-26 2 views
0

У меня есть этот код, который отлично подходит для меня и дает мне доступ к базе данных. единственная проблема заключается в том, что я хочу добавлять сообщения, тосты или что-то, чтобы отображать ошибки в случае дублированного значения первичного ключа ...Добавить Тосты в зависимости от ответа Json

Вот код моей asyncTask (я добавил Toast, но это не так работать :()

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 
} 

Вот код моего файла add_user PHP: ...........

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

может вы, ребята, скажите мне, что я могу сделать? если есть разные способы сделать то же самое, что я хотел бы попробовать: D

+0

JSON может быть нулевой, так что если вы пытаетесь разобрать его, он будет идти в свой улов, и там вы можете положить тост –

+0

я благодарю вас за réponse но, что я могу добавить, чтобы получить аранжировку, когда пользователь добавляет значение Первичного ключа (Pseudo), который уже существует? – AbdallahJg

+0

, так что теперь он не является частью вашего кода для Android, теперь на php-части –

ответ

0

Вы не можете коснуться ui из фоновой нити. Чтобы отобразить Toast, вам нужно использовать run on ui thread method. Или используйте метод обновления async. И для нулевых значений сохраняются проверки. Если в этом случае он будет отправлен в исключение и может быть возможно, это может привести к сбою приложения.

0

вы пытаетесь создать тост внутри на doInBackground, но вы, очевидно, не можете этого сделать, потому что doInBackground вызывается из фонового потока. Тосты могут создаваться только в потоке пользовательского интерфейса. Итак, я бы посоветовал обработать ваш ответ сервера и создание тостов внутри метода onPostExecute, который выполняется внутри потока пользовательского интерфейса. Вы можете сделать следующее:

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

создать этот класс, чтобы сохранить объект JSON, вы получите от сервера и «FILE_URL» String (который я не знаю, как это точно передается onPostExecute) и передать его onPostExecute. Так, doInBackground и onPostExecute может выглядеть следующим образом:

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(); 
    } 
    } 
Смежные вопросы