ActiveAndroid – 创建和内操纵的Android数据库 1 球场
大家好, 它是一个很长的时间,在Android返回博客教程. 上次我写了 5 所有关于 数据库仲机器人. 确实它是一系列很敬业的他, 然而后与数据库许多工作, 认识到自己的常见用法所以它是太难 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 -
机器人:NAME =”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. 接口设计
在该文件中定义的颜色 RES /价值/ 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>
在定义文件中的字符串 RES /价值/ 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 文件 (Android的工作室自发地给我们创建项目时). 如果你不喜欢它绝对可以分为 1 文件.
RES /布局/ 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>
RES /布局/ 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>
RES /布局/ 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文件菜单.
RES /菜单/ 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 目的) 我们只需要调用的方法 保存()
-
要检索,我们使用的项目列表 新选择().从(Friend.class).执行()
-
要删除我们使用的方法记录 删除.
这些都是在用他的ActiveAndroid数据库操作非常基本的说明 “音符”. 为了能够理解和实现你看到很多其他的事情 他们维基
您可以 项目下载的朋友在这里列出
在本教程的帖子 数据库的Android仲 由 nguyenvanquan7826
祝你开心.



friend.setName(名字).setPhone(电话).保存();
怎么了兄弟.
宝贝怎么错?
在set函数中已经返回了
兄弟,如果您想在综合浏览量中使用ImageSlide,但要在SQLite中而不是从可绘制对象中获取图像,那么
仅将图片链接保存到sqlite, 或保存照片名称, 然后根据图片名称绘制.
Tôi muốn học từ xa để làm một app đơn giản trên Android
SĐT & Zalo của tôi 0909142790