Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从android数据库读取sms记录_Android - Fatal编程技术网

从android数据库读取sms记录

从android数据库读取sms记录,android,Android,我的手机上有超过3000条短信。我正在尝试读取数据库中的所有消息。我正在使用此查询: Cursor cur1 = c.getContentResolver().query(Uri.parse("content://sms/"), null, null, null, null); cur1.getCount返回所有3000条短信,但当我通过循环解析它时,它只运行400到500条短信 Cursor cur1 = c.getContentResolver().query(Uri.parse("con

我的手机上有超过3000条短信。我正在尝试读取数据库中的所有消息。我正在使用此查询:

Cursor cur1 = c.getContentResolver().query(Uri.parse("content://sms/"), null, null, null, null);
cur1.getCount返回所有3000条短信,但当我通过循环解析它时,它只运行400到500条短信

Cursor cur1 = c.getContentResolver().query(Uri.parse("content://sms/"), null, null, null, null);
int size = cur1.getCount();

if(size > 0)
{
    sms = new SMS[size];
    //int i = 0;
    for(int i = 0 ; i < size ; i++)
    {
        cur1.moveToNext();
        ContactInfo p = new ContactInfo();
        String content = cur1.getString(cur1.getColumnIndex("body"));
        String number = cur1.getString(cur1.getColumnIndex("address"));
        long date = cur1.getLong(cur1.getColumnIndex("date"));
        String person = cur1.getString(cur1.getColumnIndex("person"));
        String protocol = cur1.getString(cur1.getColumnIndex("protocol"));
        String name = p.getName(number, c);
        String type = null;

        Calendar cal=Calendar.getInstance();
        cal.clear();
        cal.setTimeInMillis(date);

        String date_time=String.format("%1$te %1$tB %1$tY,%1$tI:%1$tM:%1$tS %1$Tp",cal);

        Log.i("INFO", content+" "+i);

        sms[i] = new SMS(type , name , number , date_time , content );
    }
}

许多其他进程都在设备上运行,由于读取3000条消息的过程很长,需要大量的连续CPU时间,这就是进程被终止的原因。当我试着把它通读一遍时,效果很好

    final Cursor cur1 = c.getContentResolver().query(Uri.parse("content://sms/"), null, null, null, "date ASC");
    final int size = cur1.getCount();

    final int sleeptimer = size;

    final SMS [] sms = new SMS[size];


    Thread  myThread = new Thread()
    {
        public void run()
        {
            try
            {
                int currentwait = 0;
                int j=0;
                while(currentwait < sleeptimer)
                {
                    sleep(200);
                    currentwait+=200;
                    for(int i = 0 ; i < 200 ; i++)
                    {
                        if(!cur1.moveToNext())
                        {
                            break;
                        }
                        ContactInfo p = new ContactInfo();
                        String content = cur1.getString(cur1.getColumnIndex("body"));
                        String number = cur1.getString(cur1.getColumnIndex("address"));
                        long date = cur1.getLong(cur1.getColumnIndex("date"));
                        String protocol = cur1.getString(cur1.getColumnIndex("protocol"));
                        String name = p.getName(number, c);
                        String type = null;

                        Calendar cal=Calendar.getInstance();
                        cal.clear();
                        cal.setTimeInMillis(date);

                        String date_time=String.format("%1$te %1$tB %1$tY,%1$tI:%1$tM:%1$tS %1$Tp",cal);

                        Log.i("INFO", content+" "+j);

                        sms[j] = new SMS(type , name , number , date_time , content );
                        j++;
                    }
                }
            }
            catch(Exception e)
            {

            }
            finally{

            }
        }
    };
    myThread.start();

它会因为异常而中断吗?那么,在for循环的前400-500次迭代之后会发生什么呢?我看不出有任何明显的原因导致循环过早结束。logcat里有什么东西吗?
    final Cursor cur1 = c.getContentResolver().query(Uri.parse("content://sms/"), null, null, null, "date ASC");
    final int size = cur1.getCount();

    final int sleeptimer = size;

    final SMS [] sms = new SMS[size];


    Thread  myThread = new Thread()
    {
        public void run()
        {
            try
            {
                int currentwait = 0;
                int j=0;
                while(currentwait < sleeptimer)
                {
                    sleep(200);
                    currentwait+=200;
                    for(int i = 0 ; i < 200 ; i++)
                    {
                        if(!cur1.moveToNext())
                        {
                            break;
                        }
                        ContactInfo p = new ContactInfo();
                        String content = cur1.getString(cur1.getColumnIndex("body"));
                        String number = cur1.getString(cur1.getColumnIndex("address"));
                        long date = cur1.getLong(cur1.getColumnIndex("date"));
                        String protocol = cur1.getString(cur1.getColumnIndex("protocol"));
                        String name = p.getName(number, c);
                        String type = null;

                        Calendar cal=Calendar.getInstance();
                        cal.clear();
                        cal.setTimeInMillis(date);

                        String date_time=String.format("%1$te %1$tB %1$tY,%1$tI:%1$tM:%1$tS %1$Tp",cal);

                        Log.i("INFO", content+" "+j);

                        sms[j] = new SMS(type , name , number , date_time , content );
                        j++;
                    }
                }
            }
            catch(Exception e)
            {

            }
            finally{

            }
        }
    };
    myThread.start();