Purtroppo ho provato a controllare ma i dati scritti sono corretti, ma per qualche strano motivo al secondo click sul bottone rigirano anche AsyncTask vecchi e che ormai dovrebbero essere stati rilasciati.
Provo ad allegare un esempio di codice funzionante che soffre di questa cosa:
Main Activity: Ha giusto un bottone ed un form da compilare. Quando si pigia il bottone quello che è scritto nel form viene messo sul db attraverso l'AsyncTask.
codice:
package com.example.testscritturamysql;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.EditText;
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: questo è il codice dell'AsyncTask. Si collega alla pagina php che si occupa di scrivere nel db MySQL.
codice:
package com.example.testscritturamysql;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.Toast;
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://xxxx.xxxx.xxx/access.php?type_connection=insert"+
"&id_location="+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);
}
}
Al primo inserimento va tutto bene, quando inserisco il secondo -cioè clicco il bottone per la seconda volta- inizio ad avere inserimenti multipli, sia del nuovo dato che del vecchio. Il debug mi traccia solo l'inserimento attuale che sto cercando di fare. Quello vecchio non lo vede.