HTTP রিলোয়েস্ট এর জন্য Volley দারুণ এরকটি লাইব্রেরী যা গুগল ম্যান্টেইন করে থাকে। আমরা একটি প্রজেক্ট তৈরি করব, এবং সেখানে Volley ব্যবহার করব। কি প্রজেক্ট করতে যাচ্ছি, তা সম্পর্কে একটু বলা যেতে পারে।
আমরা একটা HTTP রিকোয়েস্ট করব। যেখান থেকে আমাদের একটা JSON রেসপন্স দিবে। JSON ফাইলটা এখান থেকে দেখা যাবে। এরপর আমরা ঐ JSON রেসপন্স পার্স করে একটা লিস্ট ভিউতে দেখাবো।
এর জন্য আমাদের যা যা লাগবে তা হচ্ছে একটা লিস্ট ভিউ। লিস্ট ভিউতে কিভাবে কাজ করতে হয়, তা জানা না থাকলে লিস্ট ভিউ এর টিউটোরিয়ালটা দেখতে পারেন। লিস্ট ভিউ নিয়ে এখানে আর আলোচনা করা হবে না।
Volley অনেক ভাবেই প্রজেক্টে যুক্ত করা যায়। আমরা সবচেয়ে সজটা ফলো করব। আর তা জন্য আমাদের App ফোল্ডারে থাকা build.gradle ফাইলের মধ্যে dependencies এর মধ্যে নিচের dependencie টা যুক্ত করে দিব। এরপর সিঙ্ক করে নিলেই আমাদের প্রজেক্টে Volley লাইব্রেরী যুক্ত হয়ে যাবে।
compile 'com.mcxiaoke.volley:library:1.0.19'
HTTP রিকোয়েস্ট করতে নেট এর দরকার হবে। তাই Manifest ফাইলে আমরা ইন্টারনেট পারমিশনটা যুক্ত করে দিবঃ
<uses-permission android:name="android.permission.INTERNET"/>
Volley তে JSON Request, String Request, Image Request করা যায়। আমরা সিম্পল String রিকোয়েস্ট পাঠাবো। এরপর স্ট্রিং হিসেবে JSON পাবো। পড়ে ঐ JSON পার্স করে নিব। আমাদের MainActivity.java
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ListView; import android.widget.Toast; 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; public class MainActivity extends AppCompatActivity implements View.OnClickListener { public static final String JSON_URL = "http://jakir.me/files/user.json"; private Button buttonGet; private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); buttonGet = (Button) findViewById(R.id.buttonGet); buttonGet.setOnClickListener(this); listView = (ListView) findViewById(R.id.listView); } private void sendRequest(){ StringRequest stringRequest = new StringRequest(JSON_URL, new Response.Listener<String>() { @Override public void onResponse(String response) { showJSON(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_LONG).show(); } }); RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(stringRequest); } private void showJSON(String json){ ParseJSON pj = new ParseJSON(json); pj.parseJSON(); CustomList cl = new CustomList(this, ParseJSON.ids,ParseJSON.names,ParseJSON.emails); listView.setAdapter(cl); } @Override public void onClick(View v) { sendRequest(); } }
JSON পার্স করার জন্য সিম্পল একটা ক্লাস লিখেছিঃ
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class ParseJSON { public static String[] ids; public static String[] names; public static String[] emails; public static final String JSON_ARRAY = "result"; public static final String KEY_ID = "id"; public static final String KEY_NAME = "name"; public static final String KEY_EMAIL = "email"; private JSONArray users = null; private String json; public ParseJSON(String json){ this.json = json; } protected void parseJSON(){ JSONObject jsonObject=null; try { jsonObject = new JSONObject(json); users = jsonObject.getJSONArray(JSON_ARRAY); ids = new String[users.length()]; names = new String[users.length()]; emails = new String[users.length()]; for(int i=0;i<users.length();i++){ JSONObject jo = users.getJSONObject(i); ids[i] = jo.getString(KEY_ID); names[i] = jo.getString(KEY_NAME); emails[i] = jo.getString(KEY_EMAIL); } } catch (JSONException e) { e.printStackTrace(); } } }
আমাদের লিস্ট Adapter এর জন্য CustomList.java:
import android.app.Activity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; public class CustomList extends ArrayAdapter<String> { private String[] ids; private String[] names; private String[] emails; private Activity context; public CustomList(Activity context, String[] ids, String[] names, String[] emails) { super(context, R.layout.list_view_layout, ids); this.context = context; this.ids = ids; this.names = names; this.emails = emails; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = context.getLayoutInflater(); View listViewItem = inflater.inflate(R.layout.list_view_layout, null, true); TextView textViewId = (TextView) listViewItem.findViewById(R.id.textViewId); TextView textViewName = (TextView) listViewItem.findViewById(R.id.textViewName); TextView textViewEmail = (TextView) listViewItem.findViewById(R.id.textViewEmail); textViewId.setText(ids[position]); textViewName.setText(names[position]); textViewEmail.setText(emails[position]); return listViewItem; } }
activity_main এ রয়েছে একটি বাটন এবং একটি লিস্ট ভিউ। বাটনে ক্লিক করলে HTTP রিকোয়েস্ট পাঠাবে। এবং পরে রেসপন্সকে পার্স করে লিস্ট ভিউতে দেখাবে। activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Get Data" android:id="@+id/buttonGet" /> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listView" /> </LinearLayout>
list_view_layout.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:id="@+id/textViewId" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:id="@+id/textViewName" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:id="@+id/textViewEmail" /> </LinearLayout>
এই তো!
- কোড গুলো পাওয়া যাবে গিটহাবে। বা ড্রপবক্সেও কোড গুলো পাওয়া যাবে। ড্রপবক্স একাউন্ট না থাকলেএখানে ক্লিক করে খুলে নিতে পারেন।
- অ্যান্ড্রয়েড নিয়ে অন্য সব গুলো লেখা।