GreenDao의 간단한 사용 설명(二) 리스트의 증가, 삭제, 수정, 조회

28194 단어 Android
지난 글을 통해 우리는 그린다이오 프레임워크를 구축했고 세 가지 기초 조작 클래스와 Users의 사용자 클래스도 구축했다. 어느 다음에 우리는 이 리스트의 증가, 삭제, 수정, 검색 기능을 실현할 것이다.
여기에 설명하자면 간단한 예를 하나 하기 때문에 여기서 나는 데이터베이스에 대한 조작을 비동기적으로 처리하지 않았다.
첫 번째 단계는 클래스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(),"  ");
        }


    }
}

실행 효과 맵:

좋은 웹페이지 즐겨찾기