Android从扩展AsyncTask的类创建联系人

时间:2017-01-04 20:46:02

标签: android android-asynctask

我使用developers.android.com中的代码创建联系人

ArrayList<ContentProviderOperation> ops =
      new ArrayList<ContentProviderOperation>();

 int rawContactInsertIndex = ops.size();
 ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
      .withValue(RawContacts.ACCOUNT_TYPE, accountType)
      .withValue(RawContacts.ACCOUNT_NAME, accountName)
      .build());

 ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
      .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
      .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
      .withValue(StructuredName.DISPLAY_NAME, "Mike Sullivan")
      .build());

 getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

从Activity完成后它运行良好,但我想从一个扩展AsyncTask的类中完成它。我做了一些研究并最终得出结论,我需要以某种方式传递上下文(因为简单的getActivity()不起作用),所以我可以使用context.getContentResolver()。applyBatch(ContactsContract.AUTHORITY,ops); 但遗憾的是不知道如何在我的情况下这样做

1 个答案:

答案 0 :(得分:0)

这是将Context传递给AsyncTask类的方法:

片段

中的

new CreateContact().execute(getActivity());

或活动new CreateContact().execute(getApplicationContext());

public class CreateContact extends AsyncTask<Context, Void, Void> {
    Context  mContext;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();}

    @Override
    protected Void doInBackground(Context... param) {
        mContext=param[0];
        try {
          //your code.....              
          mContext.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
          }
        } catch (Exception e) {
            e.printStackTrace();}
        return null;
    }
    protected void onPostExecute(Void res) {
        //your code.....
    }
}

或者您可以将上下文传递给构造