Chuyển một đối tượng sang Json trong Android

5/5 - (2 votes)

Trong bài hướng dẫn ngắn này mình sẽ cùng bạn thực hiện 1 nhiệm vụ nho nhỏ là, chuyển 1 object sang json sau đó lưu vào database hay lưu vào SharedPreferences thì tuỳ bạn. Vì sau khi convert nó đã là String rồi thì làm gì cũng dễ.

Đầu tiên ta thêm thư viện Gson vào Gradle của module có tên là app trước

(có thể app dự án của bạn có nhiều file gradle của app khác).

implementation 'com.google.code.gson:gson:2.8.5'

Tiếp theo tạo ra 1 layout đơn giản chỉ có 1 nút bấm

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/jsonButton"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_marginStart="132dp"
        android:layout_marginTop="56dp"
        android:text="decode json"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

Khi click thì nó sẽ đổi ngược từ json sang object

Sau đó tạo 1 Activity như thế này

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.google.gson.Gson;


public class JsonDemo extends AppCompatActivity {

    String myStringToSave;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.json_demo);
        initBtn();
        EyeObj obj1 = new EyeObj();
        obj1.setWidth(10);
        obj1.setHeight(5);
        Gson gson = new Gson();
        myStringToSave = gson.toJson(obj1);
    }

    void initBtn() {
        Button btn = findViewById(R.id.jsonButton);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Gson gson = new Gson();
                EyeObj getObj = gson.fromJson(myStringToSave,EyeObj.class);
                Log.d("TAGGGGGGGGGGGG", String.valueOf(getObj.getHeight()));
            }
        });
    }

    public class EyeObj {
        public float width;
        public float height;
        public float getWidth() {
            return width;
        }
        public void setWidth(float width) {
            this.width = width;
        }
        public float getHeight() {
            return height;
        }
        public void setHeight(float height) {
            this.height = height;
        }
    }

}

Trong Activity này, khi mở app thì nó sẽ tạo ra 1 đối tượng EyeObj và gán giá trị vào thuộc tính cho nó, sau đó convert nó thành json thông qua Gson của Google và lưu vào biến toàn cục để khi click vào nút thì mình sẽ chuyển ngược nó lại thành đối tượng (mục đích để test)

Để convert 1 ArrayList sang Json thì:

ArrayList<MyImg> jsoArray = new ArrayList<>();
jsoArray.add(new MyImg("1", "img1"));
jsoArray.add(new MyImg("2", "img2"));
jsoArray.add(new MyImg("3", "img3"));

String myStr = new Gson().toJson(jsoArray);

Để convert Json sang ArrayList thì:

Gson gson = new Gson();
ArrayList<MyImg> jsoArray = new ArrayList<>();
jsoArray = gson.fromJson(first.getName(), new TypeToken<ArrayList<MyImg>>() {}.getType());
for (int i = 0; i < jsoArray.size(); i++) {
    MyImg aa = jsoArray.get(i);
    Log.i(TAG,"" + aa.getImg());
}

Các bài viết không xem thì tiếc:

Thảo luận

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Xem thêm
1 Tạo 1 file giao diện xml Android activity_main_pinch.xml <?xml…
 
 
 
 
Facetime iPhone

Main Menu