ไปที่ firebase.google.com คลิกที่ปุ่ม ไปที่คอนโซล

Create Firebase Project

select Android

เลือกที่เมนู Database เลือก Tab กฎ และเปลี่ยนสิทธิ์ให้ไม่ต้องมีการตรวจสอบผู้ใช้

 

Use Postman Test send json to Firebase

Design UI

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Name : " />

        <EditText
            android:id="@+id/edName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Group : " />

        <Spinner
            android:id="@+id/spinGroup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:entries="@array/group" />

        <Button
            android:id="@+id/btnAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Add" />

    </LinearLayout>

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

strings.xml

<resources>
    <string name="app_name">FirebaseCRUD</string>

    <array name="group">
        <item>Admin</item>
        <item>User</item>
        <item>Guest</item>
    </array>
</resources>

Create UserDao.java

public class UserDao {
    private String id;
    private String name;
    private String group;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGroup() {
        return group;
    }

    public void setGroup(String group) {
        this.group = group;
    }
}

 

Probably needs an update of Google Play Services and Google Repository.

In Android Studio SDK Manager:

  • Select SDK Tools tab
  • Select and install Google Play Services and Google Repository
  • Sync and Build

Add the dependency for Firebase Realtime Database to your app-level build.gradle file:

compile 'com.google.firebase:firebase-database:11.0.1'

MainActivity.java

Firbase Instatnce

  private void initFirebase() {
        databaseReference = FirebaseDatabase.getInstance().getReference();
    }

init Instatnces

   private void initInstances() {
        edName = (EditText) findViewById(R.id.edName);
        spinGroup = (Spinner) findViewById(R.id.spinGroup);
        btnAdd = (Button) findViewById(R.id.btnAdd);
        btnAdd.setOnClickListener(this);
        listView = (ListView) findViewById(R.id.listView);

        users = new ArrayList<>();

    }

 

set value to Firebase

   private void addUser() {
        String name = edName.getText().toString();
        String group = spinGroup.getSelectedItem().toString();

        //checking if the value is provided
        if (!TextUtils.isEmpty(name)) {
            String id = firebaseReference.child("users").push().getKey();

            UserDao user = new UserDao();
            user.setId(id);
            user.setName(name);
            user.setGroup(group);

            firebaseReference.child("users").child(id).setValue(user);

            Toast.makeText(this, "Artist added", Toast.LENGTH_LONG).show();
            edName.setText("");
        } else {
            //if the value is not given displaying a toast
            Toast.makeText(this, "Please enter a name", Toast.LENGTH_LONG).show();
        }
    }

MainActivity.java

   public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private DatabaseReference firebaseReference;
    private EditText edName;
    private Spinner spinGroup;
    private Button btnAdd;
    private ListView listView;
    private List<UserDao> users;

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

        initInstances();
        initFirebase();
    }

    private void initFirebase() {
        firebaseReference = FirebaseDatabase.getInstance().getReference();
    }

    private void initInstances() {
        edName = (EditText) findViewById(R.id.edName);
        spinGroup = (Spinner) findViewById(R.id.spinGroup);
        btnAdd = (Button) findViewById(R.id.btnAdd);
        btnAdd.setOnClickListener(this);
        listView = (ListView) findViewById(R.id.listView);

        users = new ArrayList<>();

    }

    @Override
    public void onClick(View view) {
        if (view==btnAdd){
            addUser();
        }
    }

    private void addUser() {
        String name = edName.getText().toString();
        String group = spinGroup.getSelectedItem().toString();

        //checking if the value is provided
        if (!TextUtils.isEmpty(name)) {
            String id = firebaseReference.child("users").push().getKey();

            UserDao user = new UserDao();
            user.setId(id);
            user.setName(name);
            user.setGroup(group);

            firebaseReference.child("users").child(id).setValue(user);

            Toast.makeText(this, "Artist added", Toast.LENGTH_LONG).show();
            edName.setText("");
        } else {
            //if the value is not given displaying a toast
            Toast.makeText(this, "Please enter a name", Toast.LENGTH_LONG).show();
        }
    }
}

run app

Test Add User

Check Firebase Database

 

Custom ListView

Design List Item

Create user_list_item.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:text="Name"
        android:textSize="24sp"
        android:id="@+id/tvName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:text="Group"
        android:id="@+id/tvGroup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    
</LinearLayout>

 

Create UserListItem.java

public class UserListItem extends BaseCustomViewGroup {

    private TextView tvName;
    private TextView tvGroup;

    public UserListItem(Context context) {
        super(context);
        initInflate();
        initInstances();
    }

    public UserListItem(Context context, AttributeSet attrs) {
        super(context, attrs);
        initInflate();
        initInstances();
        initWithAttrs(attrs, 0, 0);
    }

    public UserListItem(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initInflate();
        initInstances();
        initWithAttrs(attrs, defStyleAttr, 0);
    }

    @TargetApi(21)
    public UserListItem(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        initInflate();
        initInstances();
        initWithAttrs(attrs, defStyleAttr, defStyleRes);
    }

    private void initInflate() {
        inflate(getContext(), R.layout.user_list_item, this);
    }

    private void initInstances() {
        tvName = (TextView) findViewById(R.id.tvName);
        tvGroup = (TextView) findViewById(R.id.tvGroup);
    }

    private void initWithAttrs(AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        /*
        TypedArray a = getContext().getTheme().obtainStyledAttributes(
                attrs,
                R.styleable.StyleableName,
                defStyleAttr, defStyleRes);

        try {

        } finally {
            a.recycle();
        }
        */
    }

    @Override
    protected Parcelable onSaveInstanceState() {
        Parcelable superState = super.onSaveInstanceState();

        BundleSavedState savedState = new BundleSavedState(superState);
        // Save Instance State(s) here to the 'savedState.getBundle()'
        // for example,
        // savedState.getBundle().putString("key", value);

        return savedState;
    }

    @Override
    protected void onRestoreInstanceState(Parcelable state) {
        BundleSavedState ss = (BundleSavedState) state;
        super.onRestoreInstanceState(ss.getSuperState());

        Bundle bundle = ss.getBundle();
        // Restore State from bundle here
    }

    public void setTvName(String text) {
        tvName.setText(text);
    }    
    public void setTvGroup(String text) {
        tvGroup.setText(text);
    }    

}

 

Create UserAdapter

public class UserAdapter extends BaseAdapter {

    List<UserDao> users;

    public UserAdapter(List<UserDao> users) {
        this.users = users;
    }

    @Override
    public int getCount() {
        if (users == null)
            return 0;
        return users.size();
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        UserListItem item;
        if (view != null)
            item = (UserListItem) view;
        else
            item = new UserListItem(viewGroup.getContext());

        UserDao dao = users.get(position);

        item.setTvName(dao.getName());
        item.setTvGroup(dao.getGroup());

        return item;
    }
}

MainActivity.java

Show data on ListView

 private void showData() {
        Query query = firebaseReference.child("users");
        query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                users.clear();
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                    UserDao dao = postSnapshot.getValue(UserDao.class);
                    users.add(dao);
                }
                adapter = new UserAdapter(users);
                listView.setAdapter(adapter);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

Run app

Test Add User

Check Firebase Console

Update + Delete User

set Long Click on List View

Design User Dialog

user_dialog.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">

    <EditText
        android:id="@+id/edName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter name" />

    <Spinner
        android:id="@+id/spinnerGroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/group"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btnUpdate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Update" />

        <Button
            android:id="@+id/btnDelete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Delete" />

    </LinearLayout>

</LinearLayout>

MainActivity.java

Update User

  private boolean updateUser(String id, String name, String group) {
        //updating
        UserDao dao = new UserDao();
        dao.setId(id);
        dao.setName(name);
        dao.setGroup(group);

        firebaseReference.child("users").child(id).setValue(dao);
        Toast.makeText(this, "User Updated", Toast.LENGTH_LONG).show();
        return true;
    }

Delete User

   private boolean deleteUser(String id) {
        //removing
        firebaseReference.child("users").child(id).removeValue();

        Toast.makeText(this, "User Deleted", Toast.LENGTH_LONG).show();

        return true;
    }

Show Dialog

 private int getIndex(Spinner spinner, String myString) {
        int index = 0;

        for (int i = 0; i < spinner.getCount(); i++) {
            if (spinner.getItemAtPosition(i).toString().equalsIgnoreCase(myString)) {
                index = i;
                break;
            }
        }
        return index;
    }

    private void showDialog(final UserDao dao) {

        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
        LayoutInflater inflater = this.getLayoutInflater();
        final View dialogView = inflater.inflate(R.layout.user_dialog, null);
        dialogBuilder.setView(dialogView);

        final EditText edName = (EditText) dialogView.findViewById(R.id.edName);
        final Spinner spinnerGroup = (Spinner) dialogView.findViewById(R.id.spinnerGroup);
        final Button btnUpdate = (Button) dialogView.findViewById(R.id.btnUpdate);
        final Button btnDelete = (Button) dialogView.findViewById(R.id.btnDelete);

        dialogBuilder.setTitle(dao.getName());
        edName.setText(dao.getName());
        spinnerGroup.setSelection(getIndex(spinnerGroup, dao.getGroup()));
        final AlertDialog alertDialog = dialogBuilder.create();
        alertDialog.show();

        btnUpdate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name = edName.getText().toString().trim();
                String genre = spinnerGroup.getSelectedItem().toString();
                if (!TextUtils.isEmpty(name)) {
                    updateUser(dao.getId(), name, genre);
                    alertDialog.dismiss();
                }
            }
        });

        btnDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                deleteUser(dao.getId());
                alertDialog.dismiss();
            }
        });

    }

       listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                UserDao dao = users.get(i);
                showDialog(dao);
                return false;
            }
        });

Run App

Long click ListView

 

github: https://github.com/thana19/FirebaseCRUD

แนะนำการใช้งาน Firebase และสร้างแอป Android ติดต่อ Firebase Database

Comments

comments