Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách sắp xếp ArrayList Volley với đối tượng tùy chỉnh (Custom Object) trong Android

Giới thiệu

Ví dụ này minh họa cách parse JSON Array từ mạng bằng Volley, lưu vào ArrayList<CustomObject> và sắp xếp bằng Collections.sort() với Comparator tùy chỉnh.

Các bước thực hiện

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project.

Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/text"
        android:textSize="30sp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

Bước 3: Viết logic (src/MainActivity.java)

package com.example.myapplication;

import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    RequestQueue queue;
    String URL = "https://www.mocky.io/v2/597c41390f0000d002f4dbd1";

    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.text);
        final List<UserInfo> list = new ArrayList<>();
        queue = Volley.newRequestQueue(this);

        StringRequest request = new StringRequest(Request.Method.GET, URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject object = new JSONObject(response);
                            JSONArray array = object.getJSONArray("users");
                            for (int i = 0; i < array.length(); i++) {
                                JSONObject object1 = array.getJSONObject(i);
                                String name = object1.getString("name");
                                String email = object1.getString("email");
                                list.add(new UserInfo(name, email));
                            }
                            // Sắp xếp theo tên (name) alphabet
                            Collections.sort(list, new Comparator<UserInfo>() {
                                @Override
                                public int compare(UserInfo o1, UserInfo o2) {
                                    return o1.name.compareTo(o2.name);
                                }
                            });
                            // Hiển thị item đầu tiên sau sắp xếp
                            textView.setText("email: " + list.get(0).email + "\nname: " + list.get(0).name);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.d("error", error.toString());
                    }
                });

        queue.add(request);
    }

    private class UserInfo {
        String name, email;
        public UserInfo(String name, String email) {
            this.name = name;
            this.email = email;
        }
    }
}

Bước 4: AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

Bước 5: build.gradle

dependencies {
    implementation 'com.android.volley:volley:1.1.0'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    // ...
}

Chạy ứng dụng

Cần internet. Tải JSON, parse thành list UserInfo, sắp xếp theo name (A-Z), hiển thị item đầu tiên.

Cách sắp xếp ArrayList Volley với đối tượng tùy chỉnh (Custom Object) trong Android