玩下软工项目第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息(随笔没写完)

Posted ggrc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩下软工项目第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息(随笔没写完)相关的知识,希望对你有一定的参考价值。

项目的Github地址:

采用基于git的多人协作开发模式

软件采用mvc设计模式,前端这么艺术的事我不太懂,交给斌豪同学去头疼了。第一轮先实现查询通话记录返回对应号码(亲情账号?pm的需求分析还没出来,还不是很清楚具体操作)上一次的通话时间。

API接口:

 

 

 

那么我写的功能就要脱离activity了。那么首先要做的就是获取全局Context。

实现的话挺简单的,就是要先理解Context的含义,我是通过看http://www.jianshu.com/p/94e0f9ab3f1d(Context都没弄明白,还怎么做android开发?)这篇简书理解的。不是主要玩安卓开发的,碰到安卓这些特性还是挺头疼的。实现方法就是写一个Application的子类,然后修改AndroidMainifest.xml。公式化的方法了。实现后就可以通过调用,MyApplication.getContext()获取全局Context了,具体代码如下:

 1 public class MyApplication extends Application {
 2     private static Context context;
 3     @Override
 4     public void onCreate(){
 5         context=getApplicationContext();
 6     }
 7     public static Context getContext() {
 8         return context;
 9     }
10 }
1 android:name=".MyApplication"//在<application></application>中插入

然后就是建立数据库了,用安卓内置的SQLite。讲道理,一般用Litepal来操纵数据库会简单很多,但话又说回来了,我又不是主玩安卓开发的,学习这东西还是从底层开始比较容易懂,所以这里用SQLiteDatabase来操控数据库。

建立数据库:公式化的方法,两个方法是重写SQLiteOpenHelper里的方法,一个用在创建整个数据库的时候,一个用在给数据库升级的时候(比如插入新表)。

 1 public class LastTimeDatabaseHelper extends SQLiteOpenHelper{
 2     public static final String CREATE_KITH_AND_KIN = "create table KITH_AND_KIN ("
 3             + "call text primary key, "
 4             +"num text,"
 5             +"date integer)";
 6 
 7     public LastTimeDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
 8         super(context,name,factory,version);
 9 
10     }
11 
12     @Override
13     public void onCreate(SQLiteDatabase sqLiteDatabase) {
14         sqLiteDatabase.execSQL(CREATE_KITH_AND_KIN);
15     }
16 
17     @Override
18     public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
19 
20     }
21 }

 增删改查:

public class KithAndKinService {
    private String call;
    private String num;
    private long date;
    private LastTimeDatabaseHelper dbHelper;
    public KithAndKinService(String call,String num,long date,LastTimeDatabaseHelper dbHelper) {
        this.call=call;
        this.num=num;
        this.date=date;
        this.dbHelper=dbHelper;
    }
    public KithAndKinService(String call, String num, LastTimeDatabaseHelper dbHelper) {
        this.call=call;
        this.num=num;
        this.dbHelper=dbHelper;
    }
    public KithAndKinService(String call,LastTimeDatabaseHelper dbHelper)
    {
        this.call=call;
        this.dbHelper=dbHelper;
    }
    public KithAndKinService(String call,long date,LastTimeDatabaseHelper dbHelper){
        this.call=call;
        this.date=date;
        this.dbHelper=dbHelper;
    }
    public void insertToDatabase(){
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("call",call);
        values.put("num",num);
        if(date!=0)
        {
            values.put("date",date);
        }

        db.insert("KITH_AND_KIN",null,values);
    }
    public void deleteInDatabase(){
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        db.delete("KITH_AND_KIN","call=?",new String[] {call});
    }
    public List<Map<String,String>> seleteInDatabase(){
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        String temp = "call=?";
        String[] temp2 ={call};
        Cursor cursor = db.query("KITH_AND_KIN",null,temp,temp2,null,null,null);
        List<Map<String,String>> list= new ArrayList<Map<String,String>>();

        if (cursor != null && cursor.moveToFirst()) {
            do {
                Map<String,String> map = new HashMap<String,String>();
                map.put("call",cursor.getString(cursor.getColumnIndex("call")));
                map.put("num",cursor.getString(cursor.getColumnIndex("num")));
                map.put("date",cursor.getString(cursor.getColumnIndex("date")));
                list.add(map);


            } while (cursor.moveToNext());

        }

        return  list;
    }
    public void updateToDatabase(){
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("date",date);
        db.update("KITH_AND_KIN",values,"call=?",new String[] {call});
    }

}

 然后是读取用户的通话记录

首先要权限

<uses-permission android:name="android.permission.READ_CALL_LOG" />

 然后就是读取通话记录了:

 1 public class CallInfoService {
 2     private List<CallInfo> callInfos = new ArrayList<CallInfo>();
 3 
 4     public List<CallInfo> getCallInfos() {
 5         ContentResolver resolver = MyApplication.getContext().getContentResolver();
 6         Uri uri = CallLog.Calls.CONTENT_URI;
 7         String[] projection = new String[]{
 8                 CallLog.Calls.NUMBER,
 9                 CallLog.Calls.DATE,
10                 CallLog.Calls.TYPE
11         };
12         if (ActivityCompat.checkSelfPermission(MyApplication.getContext(), Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
13              List<CallInfo> temp =new ArrayList<CallInfo>();
14              temp.add(new CallInfo("0",0,0));
15              return temp;
16         }
17         Cursor cursor = resolver.query(uri, projection, null, null, null);
18         while (cursor.moveToNext()){
19             String number = cursor.getString(0);
20             long date = cursor.getLong(1);
21             int type = cursor.getInt(2);
22             callInfos.add(new CallInfo(number, date, type));
23         }
24             cursor.close();
25             return callInfos ;
26 
27     }
28 }

 数据处理:

以上是关于玩下软工项目第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息(随笔没写完)的主要内容,如果未能解决你的问题,请参考以下文章

Android :第一行安卓代码学习笔记之 全局获取 Context

Android 全局获取Context(随时随地的使用Context)

全局获取Context的技巧

全局获取Context

Android 全局获取 Context 与使用 Intent 传递对象

全局获取Context的技巧