2016-04-26 50 views
0

我有这段代码对我来说很好,并且可以访问数据库。唯一的问题是,我想添加消息,敬酒,或者在重复的主键值时显示错误...根据Json响应添加Toast

这是我的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 
} 

这里是我的PHP ADD_USER文件的代码: ...........

// 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

我感谢您的效应初探但是,当用户添加一个已经存在的主键(伪)的值时,我可以添加什么来获得一个arror? – AbdallahJg

+0

所以它不是你的android代码的一部分,它现在在PHP的部分 –

回答

0

您无法触摸后台线程中的ui。要显示Toast,您必须使用ui线程方法运行。或者使用异步任务的进度更新方法。 并为空值保持检查。如果这种情况也会发生异常,并可能会崩溃的应用程序。

0

您试图在doInBackground方法中创建一个Toast,但显然不能这样做,因为doInBackground是从后台线程调用的。敬酒只能在UI线程中创建。所以,我会建议的是处理您的服务器响应和在UI线程内执行的onPostExecute方法内创建Toasts。你可以做到以下几点:

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

创建这个类来保存你的服务器和“FILE_URL”字符串(我不知道它是如何准确地传递给onPostExecute),并把它传递给onPostExecute收到JSON对象。所以,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(); 
    } 
    }