JSON অবজেক্টকে GSON ব্যবহার করে জাভা অবজেক্ট কনভার্ট

JSON নিয়ে কাজ করার জন্য GSON দারুণ একটি লাইব্রেরী। এটি JSON কে অবজেক্টে কনভার্ট করে বা অবজেক্টকে JSON এ কনভার্ট করে দেয়। আমরা দেখব কিভাবে নেটওয়ার্ক কল থেকে পাওয়া JSON অবজেক্টকে জাভা অবজেক্টে কনভার্ট করা যায়।

আমরা একটা অ্যারে লিস্ট তৈরি করব আমাদের জাভা অবজেক্টির। এরপর Volley ব্যবহার করে নেটোওয়ার্ক রিকোয়েস্ট করব। ঐখান থেকে পাওয়া JSON অবজেক্ট থেকে আমরা জাভা অবজেক্টে কনভার্ট করব এবং অ্যারেতে রাখব। কিভাবে Volley দিয়ে সিম্পল রিকোয়েস্ট করা যায়, তা সম্পর্কে জানা যাবেঃ Volley তে সিম্পল রিকোয়েস্ট লেখাটিতে।

GSON to Java Object এ নেওয়া জন্য একটা মাত্র লাইন লিখতে হয়ঃ

 gson.fromJson(response, new TypeToken<List<Post>>(){}.getType());

GSON লাইব্রেরী আমাদের প্রজেক্ট যুক্ত করার জন্য আমাদের App ফোল্ডারে থাকা build.gradle ফাইলের মধ্যে dependencies এর মধ্যে নিচের dependencie টা যুক্ত করতে হবেঃ

compile 'com.google.code.gson:gson:2.2.4'

নেটওয়ার্ক কলের জন্য আমরা Volley ব্যবহার করব। Volley ব্যবহার করার জন্য আমাদের লাইব্রেরীটা যুক্ত করতে হবে। যুক্ত করার জন্য app lebel গ্রেডেল ফাইলে নিজের ডিপেন্ডেন্সিটা যুক্ত করে দিবঃ

compile 'com.mcxiaoke.volley:library:1.0.19'

নেটওয়ার্ক রিকোয়েস্ট করার জন্য আমাদের ইন্টারনেট পারমিশন লাগবে। Manifests এ ইন্টারনেট পারমিশন যুক্ত করবঃ

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

আমরা এখানের সিম্পল JSON ফাইলটা পার্স করব। তার জন্য Post নামে সিম্পল একটা জাভা অবজেক্ট ক্লাস তৈরি করে নিবঃ
Post.java:

public class Post {

    String title;
    String excerpt;

    public String getExcerpt() {
        return excerpt;
    }

    public void setExcerpt(String excerpt) {
        this.excerpt = excerpt;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "Post{" +
                "title='" + title + '\'' +
                ", excerpt='" + excerpt + '\'' +
                '}';
    }
}

activity_main.xm:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="me.jakir.jsontogson.MainActivity">

    <TextView android:layout_width="wrap_content" android:id="@+id/title" android:layout_height="wrap_content" />
</RelativeLayout>

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;
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;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    public static final String JSON_URL = "http://jakir.me/files/post.json";
    Gson gson = new Gson();
    List<Post> posts;
    TextView tvTitle;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvTitle = (TextView) findViewById(R.id.title);

        volleyStringRequest();

    }


    private void volleyStringRequest(){

        StringRequest stringRequest = new StringRequest(JSON_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("Result", response);


                        // JSON to Java Object
                        posts = gson.fromJson(response, new TypeToken<List<Post>>(){}.getType());

                        printTitle();

                    }
                },
                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 printTitle() {

        for (Post post : posts){

            tvTitle.append("\n \n" + post.getTitle());


        }
    }

}

কমপ্লেক্স JSON হলে jsonschema2pojo এ গিয়ে মডেল তৈরি করে নিতে পারেন।
কোড গুলো পাওয়া যাবে গিটহাবে।  GSON নিয়ে আরেকটা টিউটোরিয়ালঃ অ্যান্ড্রয়েড GSON টিউটোরিয়াল। অ্যান্ড্রয়েড নিয়ে অন্য সব গুলো লেখা।

Leave a Reply