retrofit 사용법에 대해 알려주세요

조회수 653회

이미지

이미지

SearchView로 검색 후 결과가 각각의 TextView에 나오게 하고싶습니다.

서버와는 연결했고 결과도 나오는걸 확인했습니다.

이미지

이미지

배열로 결과를 출력해서 안드로이드로도 결과를 배열로 받아들입니다.

결과를 텍스트뷰로 옮기는게 문제인데 저는 결과를 배열로 받아 다시 POJO에 각각 넣어 호출하면 된다고 생각했습니다.

<?php

require_once 'conn.php';

if(isset($_GET['name'])) {
    $name = $_GET['name'];
    $query = "SELECT * 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);

?>

public class MainActivity extends AppCompatActivity {

    SearchView searchView;
    ApiInterface apiInterface;
    TextView nameText, ageText, addressText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        nameText = findViewById(R.id.nameText);
        ageText = findViewById(R.id.ageText);
        addressText = findViewById(R.id.addressText);

        searchView = findViewById(R.id.searchView);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {
                personList(s);
                Log.e("11111", "s:" + s);

                return false;
            }

            @Override
            public boolean onQueryTextChange(String s) {
                return false;
            }
        });
    }

    public void personList(String key) {
        apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
        Call<List<Person>> call = apiInterface.getPerson(key);
        call.enqueue(new Callback<List<Person>>() {
            @Override
            public void onResponse(Call<List<Person>> call, Response<List<Person>> response) {
                if(response.isSuccessful() && response.body() != null) {
                    JSONArray jsonArray = new JSONArray(response.body());
                    Log.e("11111", "response.body:" + String.valueOf(response.body()));
                    Log.e("11111", "jsonArray:" + String.valueOf(jsonArray));
                    parseResult(jsonArray);
                }
            }

            @Override
            public void onFailure(Call<List<Person>> call, Throwable t) {

            }
        });
    }

    private void parseResult(JSONArray jsonArray) {
        for(int i = 0; i < jsonArray.length(); i++) {
            try {
                JSONObject object = jsonArray.getJSONObject(i);
                Person person = new Person();
                person.setName(object.getString("name"));
                person.setAge(object.getInt("age"));
                person.setAddress(object.getString("address"));
                Log.e("11111", "person:" + String.valueOf(person));

                nameText.setText(person.getName());
                ageText.setText(person.getAge());
                addressText.setText(person.getAddress());
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}

searchView.setOnQueryTextListener에서 검색어를 받고 personList로 가서 parseResult로 POJO에 담긴 데이터를 받으려했는데 jsonArray에서 null이 뜹니다.

제가 하고싶은건 array로 결과 받음 -> 안드로이드에서 array로 가져옴 -> POJO에 각각 넣음 -> 호출해서 TextView에 담음

이렇게 하고싶은데 어떻게 해야하나요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)