[안드로이드] retrofit 다시 질문 올립니다
조회수 465회
안드로이드 스튜디오 내에서 사용하는 interface입니다.
public interface ApiInterface {
@GET("test.php")
Call<Person> getPerson(@Query("name") String keyword);
}
Call<List<Person>>
이 아니라 저렇게 사용하고,
public void personList(String key) {
apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
Call<Person> call = apiInterface.getPerson(key);
call.enqueue(new Callback<Person>() {
@Override
public void onResponse(Call<Person> call, Response<Person> response) {
Person person = response.body();
nameText.setText(person.getName());
}
@Override
public void onFailure(Call<Person> call, Throwable t) {
Log.e("onFailure", t.toString());
}
});
}
메인액티비티 내에서 이렇게 호출하여 사용하고싶습니다.
현재 php문은 이렇게 되어있습니다.
<?php
require_once 'conn.php';
if(isset($_GET['name'])) {
$name = $_GET['name'];
$query = "SELECT `NAME`, AGE, `ADDRESS` FROM test WHERE `NAME` = '$name'";
$result = mysqli_query($conn, $query);
$response = array();
while($row = mysqli_fetch_assoc($result)) {
array_push(
$response, array(
'name'=>$row['NAME'],
'age'=>$row['AGE'],
'address'=>$row['ADDRESS'])
);
}
echo json_encode($response);
}
mysqli_close($conn);
?>
웹서버에 올리고 실행하니
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line
객체인줄 알았더니 배열이라 JsonSyntaxException이 뜹니다.
Call 이렇게 받으려면 처음부터 php문을 배열 형태로 보내면 안 되는것 같은데 PHP문을 어떻게 수정해야 하나요? 왜 오류가 났는지까지는 알았지만 제가 php를 깊게 공부한게 아니다보니 아직 php를 잘 모릅니다...
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
안녕하세요
아시다시피 PHP 에서 결과값을 Array 가 아닌 Json Object 형태로 인코딩을 해서 내려주어야 합니다.
코드 상에서 인코딩을 하는 부분이 보이지 않는 것 같네요!
echo json_encode($response); // 이것은 단지 json_encode($response) 한 것을 출력해 줄 뿐입니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력