【发布时间】:2015-11-13 12:55:03
【问题描述】:
我正在使用我的 GET 方法在 Android 中使用 Slim 框架执行 REST API。我对检索表的所有值没有任何问题,例如cars。
当我尝试通过id 访问Car 的name 时出现问题。我已经创建了 Slim 框架上的方法,并且效果很好:
获取方法
$app->get("/cars/:idCar",function($idCar) use($app)
{
try{
$connection = getConnection();
$dbh = $connection->prepare("SELECT name FROM cars WHERE idCar = ?");
$dbh->bindParam(1,$idCar);
$dbh->execute();
$car = $dbh->fetchObject();
$connection = null;
header("HTTP/1.1 200");
header("Content-Type:application/json; charset=utf-8");
echo json_encode($car,JSON_UNESCAPED_UNICODE );
}catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
});
如果我把网址放在我的浏览器上:
http://IP of my computer/project/cars/1
它返回给我:
{"name":"Car1"}
所以在GET 方法中没有任何问题。
当我尝试执行HttpGet 时出现问题,因为我卡住了我必须做的事情。我现在拥有的:
AsyncTask 中的 HttpGet 方法
class FindCar extends AsyncTask<Integer, Integer, Void> {
protected void onPreExecute(){
}
protected Void doInBackground(Integer... idCar) {
String url = "http://IP of my computer/project/cars/" + idCar[0].intValue();
HttpClient httpClient = new DefaultHttpClient();
HttpGet method = new HttpGet(url);
method.setHeader("content-type", "application/json");
try {
HttpResponse resp = httpClient.execute(method);
String respStr = EntityUtils.toString(resp.getEntity());
JSONArray respJSON = new JSONArray(respStr);
for (int i = 0; i < respJSON.length(); i++) {
JSONObject obj = respJSON.getJSONObject(i);
String name = obj.getString("name");
}
} catch (Exception ex) {
}
return null;
}
protected void onProgressUpdate(){
}
protected void onPostExecute(){
}
}
它给了我一些问题:
- 我应该为一个属性创建一个
JSONArray吗? - 在我的 AsyncTask 中获取名称的最佳做法是什么?
- 在通过我的
Car的id获得name并传递给我的AsyncTask后,如何将其从AsyncTask中返回? - 我应该创建一个
NameValuePair来设置我的id的值吗?
提前致谢!
【问题讨论】:
标签: android android-asynctask slim