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에 담음
이렇게 하고싶은데 어떻게 해야하나요?
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력