[안드로이드] 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) 한 것을 출력해 줄 뿐입니다.
    
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)