2013-02-26 144 views
0

我有一个VCardparsing的服务。我想在完成时执行一个方法。由于我的方法包含数据库查询我不能直接在服务中包含它。服务完成后执行语句

我发现我可以检查服务是否从here运行。但这不符合我的目的。我该如何继续。

编辑

private void createFavorites() { 


     DBAdapter db = new DBAdapter(this); 
     db.open(); 
     Cursor favoriteCursor = db.getAllNumbers(); 


     Uri contactUri = ContactsContract.Data.CONTENT_URI; 
     String[] contactProjection = new String[] { 
       ContactsContract.Data._ID, 
       ContactsContract.Data.DATA1,// gets number 
       ContactsContract.Data.DATA2,// gets type 
     }; 

     Cursor contactCursor = managedQuery(contactUri, contactProjection, 
       null, null, null); 

     CursorJoiner joiner = new CursorJoiner(favoriteCursor, 
       new String[] { DBAdapter.KEY_NUMBER }, contactCursor, 
       new String[] { ContactsContract.Data.DATA1 }); 

     MatrixCursor cursor = new MatrixCursor(new String[] { "number"}, 10); 
     for (CursorJoiner.Result joinerResult : joiner) { 
      switch (joinerResult) { 
      case BOTH: // handle case where a row with the same key is in 
       String id = contactCursor.getString(0); 
       // String secret_identity = sipCursor.getString(1); 
       cursor.addRow(new String[] { id }); 
       break; 
      } 
     } 
     db.close(); 
     Log.d(LOG_TAG, "final favorite contact " + cursor.getCount() + favoriteCursor.getCount() + contactCursor.getCount()); 

    } 

什么,我想在这里做的是,我已经有持有我最喜欢的号码的数据库。当我解析一个vcf时,如果这个数字存在于其中一个vcfs中,我想将它们标记为收藏夹。

回答

0

你需要使用一个IntentService和服务完成所有操作后,发送Message你相关的活动,然后执行方法,顺便说一句你是什么意思是“由于我的方法中包含数据库查询,我不能直接将其包含在服务“,你可以在服务中访问数据库也

+0

我GOOGLE了,并知道我不能使用服务类中的方法managedquery()。还有一个问题,如果我从普通班级拨打服务而不是从活动中拨出服务,该怎么办? – 2013-02-26 07:05:54

+0

你不需要使用managedquery(),你可以发布代码,你使用的是managedQuery() – 2013-02-26 07:10:35

+0

我实际上可以使用getcontentresolver(),然后使用query()而不是managedquery()。谢谢您的帮助 – 2013-02-26 09:02:58