我有这个Android程序以这种方式在Web DB(MySQL)上写入数据:AndroidApp - > HTTP GET - > PHP - > MySQL DB。在App端,我使用一个AsyncTask来读取表单并生成URL HTTP以便在我点击" Save"按钮。
问题在于:当我点击"保存"第一次按钮,应用程序工作正常。但是当我尝试在数据库中插入一个新值时,新值正确写入,但第二个线程(如幽灵)重写旧值。
所以在我的DB中我现在有:
-DATA1< - 第一次插入
-DATA2< - 第二次插入
-DATA1< - 也是第二次插入(这是错误的!)
我无法理解为什么会在第二次发生这种情况。 任何帮助表示赞赏。 :)
第一次只运行一个AsyncTask,但第二次AsyncTask工作两次(写入新数据和旧数据)。
PS:Web客户端(HTTP GET,PHP和MySQL)都运行良好。问题出在客户端Android上:(
活动代码:
public class MainActivity extends Activity {
AsyncTask<String, Void, String> task;
EditText id_location;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void startButton(View view){
id_location = (EditText)findViewById( R.id.editText1);
task = new AsyncTaskd(this,id_location.getText().toString());
task.execute();
}
}
AsyncTask代码:
public class AsyncTaskd extends AsyncTask<String,Void,String>{
String string;
Context context;
public AsyncTaskd(Context context, String string) {
this.string = string;
this.context = context;
}
protected void onPreExecute(){
}
@Override
protected String doInBackground(String... arg0) {
android.os.Debug.waitForDebugger();
try{
String link = "http://xxx.xxx.xxx/access.php?type_connection=insert"+
"&id_location="+string;
Log.w("DEBUG", "'"+string+"'");
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(link));
HttpResponse response = client.execute(request);
BufferedReader in = new BufferedReader
(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line="";
while ((line = in.readLine()) != null) {
sb.append(line);
break;
}
in.close();
return sb.toString();
}catch(Exception e){
return new String("Exception: " + e.getMessage());
}
}
@Override
protected void onPostExecute(String result){
System.out.println("Insert "+ result );
Toast toast = Toast.makeText(context, result, Toast.LENGTH_SHORT);
toast.show();
this.cancel(true);
}
}
答案 0 :(得分:0)
这是通过URL HTTP在数据库中插入数据的PHP代码:
<?php
//Credenziali accesso da php:
$mysql_host = "host";
$mysql_database = "database";
$mysql_user = "user";
$mysql_password = "password";
//connect to DB
$con=mysqli_connect($mysql_host,$mysql_user,$mysql_password,$mysql_database);
//Type connection definition
$type_connection = $_GET['type_connection'];
/////////////////////
//Connect for INSERT
if($type_connection == "insert"){
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$id_location = $_GET['id_location'];
$string="INSERT INTO `database`.`table` ( `id_location` ) VALUES ( '".$id_location."' );";
mysqli_query($con,$string);
echo "DONE INSERT!";
}
//Disconnect from DB
mysqli_close($con);
?>
答案 1 :(得分:0)
我解决了我的问题。 在调试期间,我使用的是模拟器,但它必须与AsyncTask有一些问题。坚持,当我尝试使用我的电话时,我的应用程序一直很愉快地工作,我想要向我的数据库添加新数据。没有更多的重复。
感谢Greenapps的帮助, 再见