ActiveAndroid – 内のAndroidにデータベースを作成し、操作します 1 ピッチ
みなさん、こんにちは, Android上でブログのチュートリアルを返すために、その非常に長い時間. 私は書かれていた最後の時間 5 すべてについて データベースtrongアンドロイド. 本当にそれは非常に専用の彼のシリーズです, しかし、データベースと多くの仕事の後, それはに硬すぎるので、彼らの一般的な使用を認めます 1 £, 複数のテーブルを持つデータベースを言及しないように. したがって、この疾患は怠け者生じ、何かまたは単にいくつかの方法があるかと思います “1 ピッチ” また、複雑なデータベースを作成します. そして、私はそれを発見しました – ActiveAndroid.
ここActiveAndroidホームページ: http://www.activeandroid.com/
しかし、私はちょうど彼らのgithubの退職で読みます, あなたはここで見ることができます: https://github.com/pardom/ActiveAndroid
この記事で, 私は、友達リストのアプリケーションを作るためにご案内します (名前フレンドを保存) 単にAndroidのメーカーActiveAndroidとデータベースを構築 2.0
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_NAMEは、キーワード識別データベース名です (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
あなたが幸せにしたいです.
friend.setName(名前).setPhone(電話).セーブ();
ここでは何も間違っていないし、あなた先生.
どのように私は間違っています?
見返りにこの機能を使用する前に設定されました
Bro、ページビューでImageSlideを使用したいが、ドローアブルからではなくSQLiteで画像を取得したい場合は、どうすればよいですか?
画像リンクをSQLiteのみに保存, または画像名を保存します, 次に、引き出し可能な画像名に基づいて.
Androidで簡単なアプリを作るために遠隔教育が欲しい
電話 & 私のザロ 0909142790