ActiveAndroid – 内のAndroidにデータベースを作成し、操作します 1 ピッチ

みなさん、こんにちは, Android上でブログのチュートリアルを返すために、その非常に長い時間. 私は書かれていた最後の時間 5 すべてについて データベースtrongアンドロイド. 本当にそれは非常に専用の彼のシリーズです, しかし、データベースと多くの仕事の後, それはに硬すぎるので、彼らの一般的な使用を認めます 1 £, 複数のテーブルを持つデータベースを言及しないように. したがって、この疾患は怠け者生じ、何かまたは単にいくつかの方法があるかと思います “1 ピッチ” また、複雑なデータベースを作成します. そして、私はそれを発見しました – ActiveAndroid.

ここActiveAndroidホームページ: http://www.activeandroid.com/
しかし、私はちょうど彼らのgithubの退職で読みます, あなたはここで見ることができます: https://github.com/pardom/ActiveAndroid

この記事で, 私は、友達リストのアプリケーションを作るためにご案内します (名前フレンドを保存) 単にAndroidのメーカーActiveAndroidとデータベースを構築 2.0

friendlist_activeandroid

1. 設定build.gradle

私たちは、次の項目を設定します:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.nguyenvanquan7826.friendlist"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    // for activeandroid
    repositories {
        mavenCentral()
        maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:design:23.3.0'
    compile 'com.android.support:cardview-v7:23.3.0'
    compile 'com.android.support:recyclerview-v7:23.3.0'

    // for activeandroid
    compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'
}

ラインが​​ライブラリactiveandroidをロードすることを指摘で

repositories {
    mavenCentral()
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'

2. 構成マニフェスト

アプリケーションのAndroidManifest.xmlをカードでは、次の属性を追加します。:

<application
    android:name="com.activeandroid.app.Application"
    ...
    
    <meta-data
        android:name="AA_DB_NAME"
        android:value="friendlist.db" />
    <meta-data
        android:name="AA_DB_VERSION"
        android:value="1" />
    <meta-data
        android:name="AA_MODELS"
        android:value="com.nguyenvanquan7826.friendlist.Friend" />
    
    ...
</application>

これであなたは注意を払います:

  • AA_DB_N​​AMEは、キーワード識別データベース名です (friendlist.db)

  • AA_DB_VERSIONは、キーワード識別データベースのバージョンです (最新バージョン 1), あなただけの一人でここに修正後にアップグレードされたデータベース

  • キーワードをデータベーステーブルAA_MODELS. これらのテーブルは、私たちのクラスであります (同梱包), 少し私はより多くを語るだろうしながら、. 通常、我々はAA_MODELSのメタデータを必要としません, しかし、より高速な構造化されたデータベースの負荷を処理し、Androidのために必要であればします 6 しましょう​​あなたを実行します. 複数のテーブルの場合、, 次のようにカンマを記録する方法:
    com.nguyenvanquan7826.friendlist.Friend, com.nguyenvanquan7826.friendlist.Lover

  • アンドロイド:名前=”com.activeandroid.app.Application” ここでactiveandroidのアプリケーションノウハウを用いて、我々のアプリケーションのための宣言です. あなたは、レガシーアプリケーションcom.activeandroid.app.Applicationを使用することができます他のライブラリのアプリケーションを使用している場合. あなたが継承したくない場合や、カスタムcom.activeandroid.app.Applicationアプリケーションあなたの現在のファイルは、以下のことができますように:

public class MyApplication extends SomeLibraryApplication {
    @Override
    public void onCreate() {
        super.onCreate();
        Configuration dbConfiguration = new Configuration.Builder(this).setDatabaseName("xxx.db").create();
        ActiveAndroid.initialize(dbConfiguration);
    }
}

3. インタフェースデザイン

ファイルで定義された色 解像度/値/ colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>

    <color name="white">#FFFFFF</color>
    <color name="black">#000000</color>
    <color name="background_activity">#F5F5F5</color>
    <color name="transparent">#00000000</color>
</resources>

ファイル内の文字列を定義します。 解像度/値/のstrings.xml

<resources>
    <string name="app_name">FriendList</string>
    <string name="action_settings">Settings</string>

    <string name="name">Name</string>
    <string name="phone">Phone</string>
    <string name="add">Add</string>
    <string name="update">Update</string>
    <string name="edit">Edit</string>
    <string name="delete">Delete</string>

    <string name="delete_success">Delete success</string>
    <string name="delete_fail">Delete fail</string>

    <string name="save_success">Save success</string>
    <string name="save_fail">Save fail</string>

    <string name="update_success">Update success</string>
    <string name="update_fail">Update fail</string>

    <string name="please_enter_name">Please enter name</string>
    <string name="please_enter_phone">Please enter phone</string>
</resources>

メインレイアウト定義. 私たちの主なレイアウトが含ま 2 ファイル (自然に私たちにアンドロイドStudioプロジェクトを作成します). あなたが好きではない場合、それは絶対に分類することができます 1 ファイル.

解像度/レイアウト/ activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 
    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"
    android:fitsSystemWindows="true"
    tools:context="com.nguyenvanquan7826.friendlist.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

</android.support.design.widget.CoordinatorLayout>

解像度/レイアウト/ content_main.xml このファイルには、インタフェースの主な内容が含まれています

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.nguyenvanquan7826.friendlist.MainActivity"
    tools:showIn="@layout/activity_main">

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/editName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/name"
            android:singleLine="true" />

    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/editPhone"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/phone"
            android:inputType="phone"
            android:singleLine="true" />

    </android.support.design.widget.TextInputLayout>

    <Button
        android:id="@+id/btnAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/add" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

解像度/レイアウト/ item_friend.xml インタフェースファイル 1 リスト内の項目

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="4dp"
    android:background="@color/white"
    android:foreground="?android:attr/selectableItemBackground"
    card_view:cardCornerRadius="2dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="4dp">

        <ImageView
            android:id="@+id/icFriend"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:layout_centerVertical="true"
            android:layout_marginRight="4dp"
            android:src="@drawable/ic_friend" />

        <TextView
            android:id="@+id/tvName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/icFriend"
            android:text="@string/name"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tvPhone"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/tvName"
            android:layout_toRightOf="@+id/icFriend"
            android:text="@string/phone" />

        <ImageView
            android:id="@+id/btnMore"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:src="@drawable/ic_more" />
    </RelativeLayout>
</android.support.v7.widget.CardView>

4. データ層の作成 – クラスの友達

この非常に重要なクラスの友達の作成, それだけでなく、データベース内のオブジェクト友達友達だけでなく、私たちのテーブルを作成するためのクラスです.
私たちは、以下のクラスを作成しました:

package com.nguyenvanquan7826.friendlist;

import com.activeandroid.Model;
import com.activeandroid.annotation.Column;
import com.activeandroid.annotation.Table;

@Table(name = "tbFriend")
public class Friend extends Model {

    public static final String NAME = "name";
    public static final String PHONE = "phone";

    @Column(name = NAME)
    private String name;

    @Column(name = PHONE)
    private String phone;


    public String getName() {
        return name;
    }

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

    public String getPhone() {
        return phone;
    }

    public Friend setPhone(String phone) {
        this.phone = phone;
        return this;
    }
}

このクラスでは、注意を払います:

  • クラス 友人 クラスから継承 モデル com.activeandroidの, 我々は、このクラスの友達のためにコマンドを使用して、データ・テーブルやクエリを作成することができます継承する必要があります.

  • @表(名前= “tbFriend”) 定義は、テーブル名です tbFriend データベースで. このコマンドは、あなたがそれをしたいテーブルの上のクラスの名前を書き込みます.

  • @カラム(名前= PHONE) 定義された列 電話 表中の tbFriend

5. アダプタを作成

このセクションでは、作成する必要があります 1 アダプタそれぞれの項目がありますように 1 メニューボタン (結び目 3 ドット). このボタンは表示します 1 メニュー (編集, 削除する) 上のクリックしたとき. これを達成するために、我々は、作成する必要があります 1 PopupMenuのTUファイル]メニュー.

解像度/メニュー/ menu_item_friend.xml

<menu 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"
    tools:context="com.nguyenvanquan7826.friendlist.MainActivity">
    <item
        android:id="@+id/menu_edit"
        android:orderInCategory="100"
        android:title="@string/edit"
        app:showAsAction="never" />
    <item
        android:id="@+id/menu_delete"
        android:orderInCategory="100"
        android:title="@string/delete"
        app:showAsAction="never" />
</menu>

編集のためのイベントを開始し、私たちが作成する必要があるかもしれメニューを削除することが次へ 1 インターフェイスは、治療上の情報を送信するMainActivity.

AdapterFriend.java

package com.nguyenvanquan7826.friendlist;

import android.content.Context;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

public class AdapterFriend extends RecyclerView.Adapter<AdapterFriend.RecyclerViewHolder> {
    private List<Friend> list;
    private Context context;

    public AdapterFriend(Context context, List<Friend> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {
        LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
        View itemView = inflater.inflate(R.layout.item_friend, viewGroup, false);
        return new RecyclerViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(RecyclerViewHolder viewHolder, int position) {
        Friend friend = list.get(position);
        viewHolder.tvName.setText(friend.getName());
        viewHolder.tvPhone.setText(friend.getPhone());
    }


    public class RecyclerViewHolder extends RecyclerView.ViewHolder {

        public TextView tvName;
        public TextView tvPhone;

        // for show menu edit and delete
        private PopupMenu popupMenu;

        public RecyclerViewHolder(View itemView) {
            super(itemView);

            tvName = (TextView) itemView.findViewById(R.id.tvName);
            tvPhone = (TextView) itemView.findViewById(R.id.tvPhone);
            itemView.findViewById(R.id.btnMore).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    popupMenu.show();
                }
            });
            setPopup(itemView);
        }

        /*
        * when show popup menu, we can click edit or delete menu item.
        * so we need create a interface to sent position for main activity process
        * */
        private void setPopup(View view) {
            popupMenu = new PopupMenu(context, view);
            popupMenu.getMenuInflater().inflate(R.menu.menu_item_friend, popupMenu.getMenu());
            popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.menu_edit:
                            if (listener != null) {
                                listener.edit(getAdapterPosition());
                            }
                            break;
                        case R.id.menu_delete:
                            if (listener != null) {
                                listener.del(getAdapterPosition());
                            }
                            break;
                    }
                    return true;
                }
            });
        }
    }

    public interface AdapterFriendListener {
        void del(int position);

        void edit(int position);
    }

    private AdapterFriendListener listener;

    public AdapterFriend setListener(AdapterFriendListener listener) {
        this.listener = listener;
        return this;
    }
}

6. 書くMainActivityで扱います

MainActivityの我々には 3 主なタスクは、処理するために追加含めます, 修理, 消します. 追加と編集は非常に似ています, 私たちは、新しい創造を追加した場合, 我々は正しい位置を考慮すればにわたって変更されます 1 positionEditを回します.

MainActivity.java

package com.nguyenvanquan7826.friendlist;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.activeandroid.query.Select;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MainActivity extends AppCompatActivity implements AdapterFriend.AdapterFriendListener {

    private Context context;

    private EditText editName;
    private EditText editPhone;
    private Button btnAdd;

    private AdapterFriend adapter;
    private ArrayList<Friend> list;

    /*
    * index of item need edit
    * if positionEdit = -1 then we not need edit item, so when click btnAdd we insert into database
    * if positionEdit >= 0  then we need eidt item, so when click btnAdd we update item inti database
    * */
    private int positionEdit = -1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = this;

        setContentView(R.layout.activity_main);
        connectView();
        reloadData();
    }

    private void connectView() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv);
        recyclerView.setHasFixedSize(false);
        LinearLayoutManager layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(layoutManager);
        adapter = new AdapterFriend(context, list = new ArrayList<>());
        adapter.setListener(this);
        recyclerView.setAdapter(adapter);

        editName = (EditText) findViewById(R.id.editName);
        editPhone = (EditText) findViewById(R.id.editPhone);
        btnAdd = (Button) findViewById(R.id.btnAdd);
        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                add();
            }
        });
    }

    private void add() {
        String name = editName.getText().toString().trim();
        String phone = editPhone.getText().toString().trim();

        if (TextUtils.isEmpty(name)) {
            editName.requestFocus();
            Toast.makeText(context, R.string.please_enter_name, Toast.LENGTH_SHORT).show();
            return;
        }
        if (TextUtils.isEmpty(phone)) {
            editPhone.requestFocus();
            Toast.makeText(context, R.string.please_enter_phone, Toast.LENGTH_SHORT).show();
            return;
        }
        Friend friend;
        // we not need edit
        if (positionEdit < 0) {
            friend = new Friend();
        } else { // we need edit
            friend = list.get(positionEdit);
        }

        friend.setName(name).setPhone(phone).save();
        reloadData();

        editName.setText("");
        editPhone.setText("");
        btnAdd.setText(R.string.add);
        editName.requestFocus();

        Toast.makeText(context, R.string.save_success, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void del(int position) {
        Friend.delete(Friend.class, list.get(position).getId());
        reloadData();
        Toast.makeText(context, R.string.delete_success, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void edit(int position) {
        positionEdit = position;
        editName.setText(list.get(position).getName());
        editPhone.setText(list.get(position).getPhone());
        btnAdd.setText(R.string.update);
        editName.requestFocus();
    }

    private void reloadData() {
        List<Friend> ls = new Select().from(Friend.class).execute();
        list.clear();
        list.addAll(ls);
        Collections.reverse(list);
        adapter.notifyDataSetChanged();
    }
}

あなたの注意上のコードでは:

  • 保存または挿入するには 1 レコード (1 オブジェクト) 私達はちょうどメソッドを呼び出す必要があります セーブ()

  • 私たちが使用するアイテムのリストを取得するには 新しいSelect().から(Friend.class).実行します()

  • 我々はメソッドを使用してレコードを削除するには 削除する.

これらは、内部に彼のActiveAndroidデータベース操作を使用するための非常に基本的な命令であります “音符”. あなたが見る他の多くの事を理解し、実装することができるようにするには 彼らウィキ

あなたはできます ここでは、プロジェクトのダウンロード友達リスト

チュートリアルで行われた投稿 データベースtrongのアンドロイド によって nguyenvanquan7826

あなたが幸せにしたいです.