当前位置: 首页 > 知识库问答 >
问题:

无法在未调用looper.prepare()的线程内创建处理程序。在联系人列表中添加联系人android

邵伟泽
2023-03-14

我想创建一个代码,在没有任何提示的情况下将联系人添加到android联系人列表中,但我得到了这个异常。如果你有另一个想法,我可以添加一个联系人到联系人列表没有任何窗口出现,请与我分享。我是java新手,所以如果你想帮助我展示一个例子或纠正我的代码,请。


class ContactAdd extends Activity 
{
    private String FirstName, LastName, PhoneNumber;
    private Context mContext;

    public ContactAdd(String First, String Last, String Phone, Context context)
    {
        this.FirstName = First;
        this.LastName = Last;
        this.PhoneNumber = Phone;
        this.mContext = context;
    }

    public ArrayList<ContentProviderOperation> AddContactInList()
    {
        final ArrayList<ContentProviderOperation> contacts = new ArrayList<ContentProviderOperation>();
        final int rawContactInsertIndex = contacts.size();
        SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(mContext);

    // TODO Auto-generated method stub
        contacts.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
                .withValue(RawContacts.ACCOUNT_TYPE, preference.getString("accountKey",null))
                .withValue(RawContacts.ACCOUNT_NAME, preference.getString("emailKey",null)).build());

    //Add Name
    contacts.add(ContentProviderOperation
            .newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID,0 )
            .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
            .withValue(StructuredName.DISPLAY_NAME, FirstName+" "+LastName)
            .build());


    //Add Phone Number
    contacts.add(ContentProviderOperation
            .newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, 0)
            .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
            .withValue(Phone.NUMBER, PhoneNumber)
            .withValue(Phone.TYPE, Phone.TYPE_MOBILE)
            .build());

    return contacts;

    }
}


public class Contact 
{
    public static void addContact(Activity pyActivity, String name, String phone, String email)
    {
        ContactAdd Contact = new ContactAdd(name, name, phone, pyActivity.getApplicationContext());
        ArrayList<ContentProviderOperation> contacts = Contact.AddContactInList();
        try {
            ContentProviderResult[] res = pyActivity.getContentResolver().applyBatch(ContactsContract.AUTHORITY, contacts);
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (OperationApplicationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

logcat:

jnius.jnius.JavaMethod.__call__
10-22 11:40:22.245 32726 32753 I python  :    File "jnius/jnius_export_class.pxi", line 1045, in jnius.jnius.JavaMethod.call_staticmethod
10-22 11:40:22.246 32726 32753 I python  :    File "jnius/jnius_utils.pxi", line 91, in jnius.jnius.check_exception
10-22 11:40:22.246 32726 32753 I python  :  jnius.jnius.JavaException: JVM exception occurred: Can't create handler inside thread Thread[SDLThread,5,main] that has not called Looper.prepare() java.lang.RuntimeException

我也会尝试这个代码,它工作,但一个确认窗口出现

public class Contact{

    public static void addContact(Activity pyActivity, String name, String phone, String email){
        Uri contactUri = Uri.parse(String.format("tel: %s", phone));

        Intent i = new Intent(Intents.SHOW_OR_CREATE_CONTACT, contactUri);
        i.setType(Contacts.CONTENT_TYPE);
        i.putExtra(Intents.EXTRA_FORCE_CREATE, true);
        i.putExtra(Intents.Insert.NAME, name);
        i.putExtra(Intents.Insert.PHONE, phone);
        i.putExtra(Intents.Insert.EMAIL, email);
        pyActivity.startActivity(i);
    }
}

共有1个答案

岳茂
2023-03-14

公共ContactAdd(字符串第一,字符串最后,字符串电话,上下文上下文)

这个构造函数用于什么?

不能使用new运算符启动活动。

必须使用意图创建活动。

如果您不需要活动的功能,那么不要从活动扩展。

 类似资料:
  • 问题内容: 我收到此错误“无法在未调用Looper.prepare()的线程内创建处理程序” 你能告诉我如何解决吗? StartPayment方法: 问题答案: 您应该知道,当您尝试修改UI时, 唯一 可以执行此操作的线程是。 因此,如果要在另一个线程中修改UI,请尝试使用以下方法: 您的代码应如下所示:

  • 问题内容: 我正在使用AsyncTask调用yahooweather API。以下是代码: } 调试代码后,我发现yahooAPI调用成功,并且可以在函数中看到XML响应。但是,一旦执行完此功能,就会引发异常: 请帮帮我。 问题答案: 从方法中删除所有Toast的from,因为此方法是从of 调用的,并且您无法从后台线程访问Toast等Ui元素(也是Ui元素)。 注意: 如果您想知道后台发生了什么

  • 我在android中点击添加学生时出错了

  • 问题内容: 我不明白为什么会收到此错误。我正在使用AsyncTask在后台运行一些进程。 我有: 当我根据情况进入时: 每当我尝试我都会收到错误消息。 有想法吗? 问题答案: 该方法必须从被调用用户界面(UI)螺纹,而在不同的螺纹,其是主要的原因,运行被设计。 你必须调用无论是在或。 例如:

  • 错误: I/flutter(1615)://data/user/0/com.example.camera_app/app_flutter/2020-05-29 23:35:12.398628.PNG I/flutter(1615):Going Image I/flutter(1615):404 I/flutter(1615):Image Send I/flutter(1615):form come

  • 我正在使用Google Maps V2 API开发一个简单的应用程序,只是为了获得基本知识,我面临着这个错误: 奇怪的是,我可以在我的模拟器(API16)上运行这个应用程序,它运行得很好,但当我试图在物理设备(API15)上运行它时,它得到了这个错误。AsyncTask在单独的类中运行,因此可能会导致此问题。如果有任何建议,我将不胜感激。提前谢了。