【发布时间】:2017-05-12 15:14:52
【问题描述】:
嘿,我是 android 开发的新手,我目前正在尝试建立与我的数据库的连接,以便我可以处理手机上的数据。
我在 php 中使用 OkHttp 和 mysqli。
我编写了一个处理程序来访问 .php 页面并进行数据库调用。
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;
}
我想做这样的事情:
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();
}
现在,我知道这个丑陋的 while(true) 是一个糟糕的解决方案。但是我应该怎么做才能让我 100% 确定我在将它传递给“getSongwriterFromJSON”之前得到了我的 responseString? 我真的不明白它应该如何工作。
当我逐步调试代码时,代码运行良好,但应用程序只是不时出现黑屏,无需调试。我想那是由于 while(true) 循环,它可能只是运行和运行并为线程计时,这样我的后台线程就死了——我真的不知道了。
如果您提供帮助,请解释我做错了什么,以及我应该如何做对。谢谢。
编辑使用的php文件:
<?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);
?>
【问题讨论】:
-
你的 PHP 脚本有响应吗?也添加你的 PHP 脚本
-
我刚刚添加了我的 php 文件 - 是的,它确实给出了响应。它在调试模式下运行良好。但是如果我让它正常运行就不会完成它的工作。