एंड्रॉइड में Volley और AbstractList से JSON ऐरे पार्स करें
यह ट्यूटोरियल दिखाता है कि Volley लाइब्रेरी का उपयोग करके JSON ऐरे डेटा कैसे प्राप्त करें, उसे कस्टम ऑब्जेक्ट्स में पार्स करें, और AbstractList (via ArrayList) में स्टोर करके सॉर्ट करें।
निर्भरताएं (build.gradle)
dependencies {
implementation 'com.android.volley:volley:1.2.1'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.code.gson:gson:2.10.1' // वैकल्पिक, पार्सिंग के लिए
}
चरण 1: प्रोजेक्ट बनाएं
एंड्रॉइड स्टूडियो में नया प्रोजेक्ट बनाएं और ऊपर दी गई निर्भरताएं जोड़ें।
चरण 2: लेआउट (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/resultText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="16sp"
android:padding="16dp"
android:background="#F5F5F5"
android:text="लोड हो रहा है..."/>
</LinearLayout>
चरण 3: डेटा मॉडल
public class UserInfo implements Comparable{ public final String id; public final String name; public final String email; public UserInfo(String id, String name, String email) { this.id = id; this.name = name; this.email = email; } @Override public int compareTo(UserInfo other) { // ID द्वारा सॉर्ट (संख्यात्मक) try { return Integer.compare(Integer.parseInt(this.id), Integer.parseInt(other.id)); } catch (NumberFormatException e) { return this.id.compareTo(other.id); // फॉलबैक: स्ट्रिंग तुलना } } @Override public String toString() { return "ID: " + id + ", नाम: " + name + ", ईमेल: " + email; } }
चरण 4: मेन एक्टिविटी (src/MainActivity.java)
package com.example.volleyabstractlist;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
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.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private TextView resultText;
private RequestQueue queue;
private static final String URL = "https://mocki.io/v1/..."; // टेस्ट API एंडपॉइंट
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resultText = findViewById(R.id.resultText);
queue = Volley.newRequestQueue(this);
// AbstractList के रूप में ArrayList उपयोग करें
final AbstractList userList = new ArrayList<>();
// JsonObjectRequest उपयोग करें (StringRequest के बजाय बेहतर)
JsonObjectRequest request = new JsonObjectRequest(
Request.Method.GET, URL, null,
new Response.Listener() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray usersArray = response.getJSONArray("users");
for (int i = 0; i < usersArray.length(); i++) {
JSONObject userObj = usersArray.getJSONObject(i);
String id = userObj.getString("id");
String name = userObj.getString("name");
String email = userObj.optString("email", "N/A"); // वैकल्पिक फील्ड
userList.add(new UserInfo(id, name, email));
}
// AbstractList पर Collections.sort() काम करता है क्योंकि ArrayList Comparable लागू करता है
Collections.sort(userList);
// परिणाम प्रदर्शित करें
StringBuilder sb = new StringBuilder("कुल यूजर्स: " + userList.size() + "\n\n");
for (int i = 0; i < Math.min(5, userList.size()); i++) {
sb.append(userList.get(i).toString()).append("\n");
}
if (userList.size() > 5) {
sb.append("\n... और ").append(userList.size() - 5).append(" यूजर्स");
}
resultText.setText(sb.toString());
} catch (JSONException e) {
Log.e("VOLLEY", "JSON पार्स त्रुटि", e);
resultText.setText("JSON पार्स त्रुटि: " + e.getMessage());
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("VOLLEY", "नेटवर्क त्रुटि", error);
resultText.setText("नेटवर्क त्रुटि: " + error.getMessage());
}
}
);
// रीट्राय पॉलिसी सेट करें
request.setRetryPolicy(new com.android.volley.DefaultRetryPolicy(
10000, // टाइमआउट ms
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
));
queue.add(request);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (queue != null) queue.cancelAll(this); // लीक रोकें
}
}
चरण 5: मैनिफेस्ट परमिशन (AndroidManifest.xml)
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
AbstractList vs ArrayList vs List
| प्रकार | विवरण |
|---|---|
List<T> | इंटरफेस - सबसे सामान्य, लचीला |
AbstractList<T> | आधार अमूर्त वर्ग - कस्टम लिस्ट कार्यान्वयन के लिए |
ArrayList<T> | कॉन्क्रीट कार्यान्वयन - डायनामिक ऐरे, रैंडम एक्सेस तेज |
LinkedList<T> | कॉन्क्रीट कार्यान्वयन - डबल लिंक्ड लिस्ट, इन्सर्शन/डिलीशन तेज |
