Giới thiệu
Mở rộng từ bài trước, ví dụ này parse mảng JSON thành danh sách đối tượng UserInfo (chứa id, name) và sắp xếp theo ID tăng dần.
Các bước thực hiện
Bước 1: Project & Dependency Volley
Thêm implementation 'com.android.volley:volley:1.2.1' vào build.gradle.
Bước 2: Giao diện
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="20sp" />
Bước 3: Model & Logic (MainActivity.java)
public class MainActivity extends AppCompatActivity {
private TextView textView;
private RequestQueue queue;
private static final String URL = "https://mocky.io/v2/597c41390f0000d002f4dbd1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text);
queue = Volley.newRequestQueue(this);
StringRequest request = new StringRequest(Request.Method.GET, URL,
response -> {
try {
JSONObject obj = new JSONObject(response);
JSONArray array = obj.getJSONArray("users");
List list = new ArrayList<>();
for (int i = 0; i < array.length(); i++) {
JSONObject user = array.getJSONObject(i);
list.add(new UserInfo(
user.getString("id"),
user.getString("name")
));
}
// Sắp xếp theo ID
Collections.sort(list, (o1, o2) -> o1.id.compareTo(o2.id));
UserInfo first = list.get(0);
textView.setText("ID: " + first.id + "\nName: " + first.name);
} catch (Exception e) {
e.printStackTrace();
textView.setText("Lỗi: " + e.getMessage());
}
},
error -> textView.setText("Lỗi mạng")
);
queue.add(request);
}
// Inner class model
private static class UserInfo {
String id, name;
UserInfo(String id, String name) { this.id = id; this.name = name; }
}
}
Bước 4: Quyền Internet
<uses-permission android:name="android.permission.INTERNET" />
Giải thích
- Tạo class
UserInfođóng gói id và name. - Dùng
Collections.sort()vớiComparatorlambda so sánh chuỗi ID. - Hiển thị phần tử đầu tiên sau khi sắp xếp.