Hey Im assez nouveau pour android développement et Im actuellement en train d'essayer d'établir une connexion à ma base de données afin que je puisse travailler avec les données sur mon téléphone. Im utilisant OkHttp et mysqli avec php.OkHttp - Android obtenir des données à partir de la base de données MySQL
J'ai écrit un gestionnaire qui accède aux pages .php et effectue les appels de base de données.
public class OkHttpHandler extends AsyncTask<String, Void, String> {
private OkHttpClient client = null;
public String latestMessage = "";
public OkHttpHandler(){
client = new OkHttpClient();
}
@Override
protected String doInBackground(String... params) {
Request.Builder builder = new Request.Builder();
builder.url(params[0].toString());
Request request = builder.build();
try{
Response response = client.newCall(request).execute();
latestMessage = response.body().string();
return response.body().string();
} catch(Exception e){
e.printStackTrace();
}
//latestMessage = "failed";
return null;
}
Et je veux faire quelque chose comme ceci:
public int getSongwriterId(String songwriter) {
OkHttpHandler okHttpHandler = new OkHttpHandler();
okHttpHandler.execute(url_get_songwriter_id + "?songwriter=" + songwriter);
String responseString = "";
while(responseString == "") {
responseString = okHttpHandler.latestMessage;
}
okHttpHandler.cancel(true);
Songwriter s = getSongwriterFromJSON(responseString);
return s.getId();
}
Maintenant, je sais que ce laid while (true) est une solution merdique. Mais comment dois-je le faire si Im 100% certain que j'ai eu ma responseString avant de le passer dans "getSongwriterFromJSON"? Je ne comprends vraiment pas comment cela est censé fonctionner.
Le code fonctionne très bien lorsque je le débogue pas à pas, mais l'application ne fait que noircir de temps en temps sans débogage. Je suppose que cela est dû à la boucle while (true) et que ça fonctionne et court et clique sur le thread de sorte que mon thread de fond meurt juste - je ne sais vraiment plus. S'il vous plaît, si vous fournissez de l'aide, expliquez ce que je fais de mal et comment je devrais le faire correctement. Merci.
Modifier fichier php utilisé:
<?php
$response = array();
$con = @mysqli_connect("XXX", "XXX", "XXX", "XXX");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql = "Select * FROM songwriter ";
$sql .= "where composerName = '";
$sql .= $_GET["songwriter"];
$sql .= "'";
$query = mysqli_query($con,$sql);
// looping through all results
$response["songwriter"] = array();
while ($row = mysqli_fetch_array($query)) {
$songwriter = array();
$songwriter["id"] = $row["id"];
$songwriter["composerName"] = $row["composerName"];
$songwriter["arrangerName"] = $row["arrangerName"];
// push single product into final response array
array_push($response["songwriter"], $songwriter);
}
// echoing JSON response
echo json_encode($response);
?>
Est-ce que votre script PHP donner une réponse? Ajoutez votre script PHP ainsi – Zoe
J'ai juste ajouté mon fichier php - oui, il donne une réponse.Cela fonctionne bien en mode débogage. Mais ne fera pas son travail si je le laisse fonctionner normalement. – Vulkanos