GreenDao의 간단한 사용 설명(二) 리스트의 증가, 삭제, 수정, 조회
28194 단어 Android
여기에 설명하자면 간단한 예를 하나 하기 때문에 여기서 나는 데이터베이스에 대한 조작을 비동기적으로 처리하지 않았다.
첫 번째 단계는 클래스BaseApplication을 쓰는 것입니다.자바, 이런 것들은 그린다오의 Dao Master와Dao Session을 얻는 데 사용되며, 먼저 코드를 보십시오.
package com.example.cg.greendaolearn.db;
import android.app.Application;
import android.content.Context;
import com.example.cg.greendaolearn.THDevOpenHelper;
import com.guangda.dao.DaoMaster;
import com.guangda.dao.DaoSession;
/**
* DaoMaster Application Session 。
* Created by cg on 2015/12/29.
*/
public class BaseApplication extends Application {
private static BaseApplication mInstance;
private static DaoMaster daoMaster;
private static DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
if(mInstance == null)
mInstance = this;
}
/**
* DaoMaster
*
* @param context
* @return DaoMaster
*/
public static DaoMaster getDaoMaster(Context context) {
if (daoMaster == null) {
DaoMaster.OpenHelper helper = new THDevOpenHelper(context,"myDb",null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
}
return daoMaster;
}
/**
* DaoSession
*
* @param context
* @return DaoSession
*/
public static DaoSession getDaoSession(Context context) {
if (daoSession == null) {
if (daoMaster == null) {
daoMaster = getDaoMaster(context);
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
}
코드의 주석을 통해 알 수 있듯이 응용 프로그램에서 계승해야 한다. 주로 세션을 생성하는 대상을 여러 번 만들지 않고 성능을 향상시키기 위해서다.두 번째 단계는 하나의 조작 유형을 구축하여 증가, 삭제, 수정, 조사하는 방법을 모두 쓴다.사용하기 편리하다.코드는 다음과 같다.
DbService.java
package com.example.cg.greendaolearn.db;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import com.guangda.dao.DaoSession;
import com.guangda.dao.UsersDao;
import java.util.List;
import greendao.Users;
/**
*
* Created by cg on 2015/12/29.
*/
public class DbService {
private static final String TAG = DbService.class.getSimpleName();
private static DbService instance;
private static Context appContext;
private DaoSession mDaoSession;
private UsersDao userDao;
private DbService() {
}
/**
*
* @param context
* @return dbservice
*/
public static DbService getInstance(Context context) {
if (instance == null) {
instance = new DbService();
if (appContext == null){
appContext = context.getApplicationContext();
}
instance.mDaoSession = BaseApplication.getDaoSession(context);
instance.userDao = instance.mDaoSession.getUsersDao();
}
return instance;
}
/**
* id,
* @param id id
* @return
*/
public Users loadNote(long id) {
if(!TextUtils.isEmpty(id + "")) {
return userDao.load(id);
}
return null;
}
/**
*
* @return
*/
public List loadAllNote(){
return userDao.loadAll();
}
/**
* id
* @return
*/
public List loadAllNoteByOrder()
{
return userDao.queryBuilder().orderDesc(UsersDao.Properties.Id).list();
}
/**
* ,
* @param where
* @param params
* @return
*/
public List queryNote(String where, String... params){
return userDao.queryRaw(where, params);
}
/**
* ,
* @param user
* @return id
*/
public long saveNote(Users user){
return userDao.insertOrReplace(user);
}
/**
*
* @param list
*/
public void saveNoteLists(final List list){
if(list == null || list.isEmpty()){
return;
}
userDao.getSession().runInTx(new Runnable() {
@Override
public void run() {
for(int i=0; i
이 종류는 더 이상 말하지 않겠습니다. 여러분은 보자마자 알 수 있고 간단합니다. 그리고 그 안에서도 비교적 명확하게 주해를 해 주었습니다.3단계, 레이아웃 파일 설정
1, Toolbar 코드:
그럼요. 도구바를 사용하고 싶으면 스타일도 설정해야 합니다. 스타일.xml
이제 페이지의 메인 레이아웃을 살펴보자. 이 레이아웃은 사실 매우 간단하다. 바로 Toolbar이다. Toolbar의 메뉴에 추가된 단추가 있다. 그리고 다음은listView가 사용자를 표시하는데 사용된다. 추가 단추를 누르면 대화 상자를 팝업해서 추가할 항목을 표시한다. 작성한 후에 저장하고 새로 추가된 데이터는listView에 나타난다.목록 항목을 클릭하면 상자를 팝업합니다. 위에 삭제와 수정 옵션이 있습니다. 이 항목을 삭제하고 수정할 수 있습니다.
자, 우선 액티비티one_table.xml 파일
다음은 도구바 메뉴 표시줄의 레이아웃 파일,menuone_table.xml.주로 추가된 단추가 추가됐어요.
다음은listView 목록입니다. 이 목록에 item의 레이아웃을 설정합니다.코드는 비교적 간단하다:'
activity_onetable_lv_item.xml
어댑터 추가 설계
onetable_adapter.java
package com.example.cg.greendaolearn.adpater;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.example.cg.greendaolearn.R;
import java.util.List;
import greendao.Users;
/**
* Adapter
* Created by cg on 2015/12/29.
*/
public class onetable_adapter extends BaseAdapter {
private LayoutInflater inflater;
private List list_user;
public onetable_adapter(Context context,List list_user) {
this.inflater = LayoutInflater.from(context);
this.list_user = list_user;
}
@Override
public int getCount() {
return list_user.size();
}
@Override
public Object getItem(int position) {
return list_user.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
userInfo uInfo;
if(convertView==null)
{
uInfo = new userInfo();
convertView = inflater.inflate(R.layout.activity_onetable_lv_item,null);
uInfo.uAge = (TextView)convertView.findViewById(R.id.txt_onetable_age);
uInfo.uName = (TextView)convertView.findViewById(R.id.txt_onetable_uName);
uInfo.uSex = (TextView)convertView.findViewById(R.id.txt_onetable_uSex);
uInfo.uTel = (TextView)convertView.findViewById(R.id.txt_onetable_tel);
convertView.setTag(uInfo);
}else
{
uInfo = (userInfo)convertView.getTag();
}
uInfo.uSex.setText(list_user.get(position).getUSex());
uInfo.uTel.setText(list_user.get(position).getUTelphone());
uInfo.uName.setText(list_user.get(position).getUName());
uInfo.uAge.setText(list_user.get(position).getUAge());
return convertView;
}
public class userInfo
{
TextView uName;
TextView uSex;
TextView uAge;
TextView uTel;
}
}
listVIew가 끝났습니다.추가를 눌렀을 때 팝업된 대화상자를 완성합니다. 여기에는DialogFragment가 있습니다.
레이아웃 파일fragment 먼저 보기onetable_dialog.xml
코드: oneTableDialogFragment.java
package com.example.cg.greendaolearn;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
/**
*
* Created by cg on 2015/12/30.
*/
public class oneTableDialogFragment extends DialogFragment {
private EditText edit_onetable_name;
private EditText edit_onetable_sex;
private EditText edit_onetable_tel;
private EditText edit_onetable_age;
private String uName; //
private String uSex; //
private String uAge; //
private String uTel; //
private int flag; //flag 0: 1:
private long uId; // id, 0, id
/**
*
*/
public interface addUserOnClickListener
{
void onAddUserOnClick(long id,String uName, String uSex,String uAge,String uTel,int flag);
}
public oneTableDialogFragment(long uId,String uName, String uSex, String uAge, String uTel,int flag) {
this.uName = uName;
this.uSex = uSex;
this.uAge = uAge;
this.uTel = uTel;
this.flag = flag;
this.uId = uId;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.fragment_onetable_dialog, null);
edit_onetable_name = (EditText) view.findViewById(R.id.edit_onetable_name);
edit_onetable_sex = (EditText) view.findViewById(R.id.edit_onetable_sex);
edit_onetable_tel = (EditText) view.findViewById(R.id.edit_onetable_tel);
edit_onetable_age = (EditText)view.findViewById(R.id.edit_onetable_age);
edit_onetable_name.setText(uName);
edit_onetable_age.setText(uAge);
edit_onetable_sex.setText(uSex);
edit_onetable_tel.setText(uTel);
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(view)
// Add action buttons
.setTitle(" ")
.setPositiveButton(" ",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int id)
{
addUserOnClickListener listener = (addUserOnClickListener) getActivity();
listener.onAddUserOnClick(uId,edit_onetable_name.getText().toString(),
edit_onetable_sex.getText().toString(),
edit_onetable_age.getText().toString(),
edit_onetable_tel.getText().toString(),
flag);
}
}).setNegativeButton(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
edit_onetable_name.setText("");
edit_onetable_sex.setText("");
edit_onetable_age.setText("");
edit_onetable_tel.setText("");
}
});
return builder.create();
}
}
여기는 더 이상 말하지 않겠다. 첫째, 코드가 비교적 간단하고, 둘째, 안의 주석도 비교적 명확해서 모두가 한눈에 알아차렸다.
다음은 item 항목을 눌렀을 때 팝업된 상자를 디자인하고 레이아웃을 먼저 보면 두 개의textView가 있습니다
fragment_onetable_itemdialog.xml
코드: oneTableItemDialogFragment.java
package com.example.cg.greendaolearn;
import android.app.DialogFragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView;
/**
* Created by cg on 2015/12/30.
*/
public class oneTableItemDialogFragment extends DialogFragment {
private long id; // id
private int postion; //list
private TextView txt_onetable_update;
private TextView txt_onetable_delete;
public interface EditUserOnClickListener
{
//flag ,0 ,1
void onEditUserOnClick(long id,int postion,int flag);
}
public oneTableItemDialogFragment(long id,int postion) {
this.id = id;
this.postion = postion;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
View view = inflater.inflate(R.layout.fragment_onetable_itemdialog,container);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
txt_onetable_update = (TextView)view.findViewById(R.id.txt_onetable_update);
txt_onetable_update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditUserOnClickListener listener = (EditUserOnClickListener) getActivity();
listener.onEditUserOnClick(id,postion,1);
}
});
txt_onetable_delete = (TextView)view.findViewById(R.id.txt_onetable_delete);
txt_onetable_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditUserOnClickListener listener = (EditUserOnClickListener) getActivity();
listener.onEditUserOnClick(id,postion,0);
}
});
}
}
오케이, 이제 메인 프로그램의 코드: oneTableActivity.java
package com.example.cg.greendaolearn;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import com.example.cg.greendaolearn.adpater.onetable_adapter;
import com.example.cg.greendaolearn.db.DbService;
import java.util.ArrayList;
import java.util.List;
import greendao.Users;
public class oneTableActivity extends AppCompatActivity implements oneTableDialogFragment.addUserOnClickListener,oneTableItemDialogFragment.EditUserOnClickListener {
private Toolbar toolbar; // toolbar
private ListView lv_oneTable;
private List list_user;
private onetable_adapter oAdapter;
private DbService db;
private oneTableItemDialogFragment oneItemDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one_table);
toolbar = (Toolbar)this.findViewById(R.id.toolbar);
toolbar.setTitle(" "); // setSupportActionBar ,
setSupportActionBar(toolbar);
db = DbService.getInstance(this);
initControls();
initData();
}
/**
* ,
*/
private void initData() {
list_user = new ArrayList<>();
list_user = db.loadAllNoteByOrder();
oAdapter = new onetable_adapter(this,list_user);
lv_oneTable.setAdapter(oAdapter);
}
/**
*
*/
private void initControls() {
lv_oneTable = (ListView)findViewById(R.id.lv_oneTable);
lv_oneTable.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
Toast.makeText(oneTableActivity.this,list_user.get(position).getUName() + "--" +
list_user.get(position).getId(),Toast.LENGTH_SHORT).show();
oneItemDialog = new oneTableItemDialogFragment(list_user.get(position).getId(),position);
oneItemDialog.show(getFragmentManager()," ");
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_one_table, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.menu_onetable_add) {
oneTableDialogFragment oneDialog = new oneTableDialogFragment(0,"","","","",0);
oneDialog.show(getFragmentManager()," ");
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onAddUserOnClick(long uId,String uName, String uSex, String uAge, String uTel,int flag) {
Users user = new Users();
if(flag==1) {
user.setId(uId);
}
user.setUSex(uSex);
user.setUTelphone(uTel);
user.setUAge(uAge);
user.setUName(uName);
if(flag==0) {
if (db.saveNote(user) > 0) {
list_user.add(0, user);
oAdapter.notifyDataSetChanged();
}
}else
{
if (db.saveNote(user) > 0) {
int num = 0;
for(Users u:list_user)
{
if(u.getId()==uId)
{
list_user.remove(num);
list_user.add(num,user);
break;
}
num++;
}
oAdapter.notifyDataSetChanged();
}
}
}
@Override
public void onEditUserOnClick(long id,int postion,int flag) {
if(flag==0) {
db.deleteNote(id);
list_user.remove(postion);
oAdapter.notifyDataSetChanged();
oneItemDialog.dismiss();
}else
{
Users updateUser = db.loadNote(id);
oneTableDialogFragment oDialog = new oneTableDialogFragment(updateUser.getId(),updateUser.getUName(),updateUser.getUSex(),
updateUser.getUAge(), updateUser.getUTelphone(),1);
oneItemDialog.dismiss();
oDialog.show(getFragmentManager()," ");
}
}
}
실행 효과 맵:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.