Android 强制关闭,不获取输出

Android 强制关闭,不获取输出,android,Android,我正在尝试按用户的活动获取联系人号码(已选择)。如何解决这个问题?强制关闭,不获取输出! 我读过很多教程,但这对我没有多大帮助 package com.example.c_p; import java.util.Iterator; import java.util.Set; import android.app.Activity; import android.content.Intent; import android.database.Cur

我正在尝试按用户的活动获取联系人号码(已选择)。如何解决这个问题?强制关闭,不获取输出! 我读过很多教程,但这对我没有多大帮助

  package com.example.c_p;


    import java.util.Iterator;
    import java.util.Set;

    import android.app.Activity;
    import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.ContactsContract.CommonDataKinds.Phone;
    import android.provider.ContactsContract.Contacts;
    import android.util.Log;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;

    public class MainActivity extends Activity {
        private static final int CONTACT_PICKER_RESULT = 1001;
    public static final String DEBUG_TAG = null;
         EditText emailEntry = (EditText) findViewById(R.id.invite_email);
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
        public void doLaunchContactPicker(View view)
        {
        Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
                Contacts.CONTENT_URI);
        startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);
    }
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data)
        {
            if (resultCode == RESULT_OK) {
                switch (requestCode)
                {
                case CONTACT_PICKER_RESULT:
                    Cursor cursor = null;
                    String phone = "";
                    try {
                        Bundle extras = data.getExtras();
                        Set<String> keys = extras.keySet();
                        Iterator<String> iterate = keys.iterator();
                        while (iterate.hasNext()) {
                            String key = iterate.next();
                            Log.v(DEBUG_TAG, key + "[" + extras.get(key) + "]");
                        }

                        Uri result = data.getData();
                        Log.v(DEBUG_TAG, "Got a contact result: "
                                + result.toString());

                        // get the contact id from the Uri
                        String id = result.getLastPathSegment();


                        cursor = getContentResolver().query(Phone.CONTENT_URI,
                                null, Phone.CONTACT_ID + "=?", new String[] { id },
                                null);

                        int PhoneIdx = cursor.getColumnIndex(Phone.DATA);


                        if (cursor.moveToFirst()) {
                                         phone = cursor.getString(PhoneIdx);

                            Log.v(DEBUG_TAG, "Got number: " + phone);

                        } else {
                            Log.w(DEBUG_TAG, "No results");
                        }
                    } catch (Exception e) {
                        Log.e(DEBUG_TAG, "Failed to Number", e);
                    } 
                    finally {
                        if (cursor != null) {
                            cursor.close();
                        }

                        emailEntry.setText(phone);

                        if (phone.length() == 0) {
                            Toast.makeText(this, "No number found for contact.",
                                    Toast.LENGTH_LONG).show();
                        }

                    }

                    break;
                }

            } else {
                Log.w(DEBUG_TAG, "Warning: activity result not ok");
            }
        }
    }
package com.example.c\p;
导入java.util.Iterator;
导入java.util.Set;
导入android.app.Activity;
导入android.content.Intent;
导入android.database.Cursor;
导入android.net.Uri;
导入android.os.Bundle;
导入android.provider.contacts contract.CommonDataTypes.Phone;
导入android.provider.Contacts contract.Contacts;
导入android.util.Log;
导入android.view.view;
导入android.widget.EditText;
导入android.widget.Toast;
公共类MainActivity扩展了活动{
专用静态最终int触点\u选择器\u结果=1001;
公共静态最终字符串DEBUG_TAG=null;
EditText emailEntry=(EditText)findViewById(R.id.invite_email);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
公共无效doLaunchContactPicker(视图)
{
Intent contactPickerIntent=新的Intent(Intent.ACTION\u PICK,
联系人。内容(URI);
startActivityForResult(联系人选取器内容、联系人选取器结果);
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据)
{
if(resultCode==RESULT\u OK){
开关(请求代码)
{
案例联系人\u选取者\u结果:
游标=空;
字符串phone=“”;
试一试{
Bundle extras=data.getExtras();
Set keys=extras.keySet();
Iterator iterate=keys.Iterator();
while(iterate.hasNext()){
字符串键=iterate.next();
Log.v(DEBUG_标记,key++“[”+extras.get(key)+“]);
}
Uri结果=data.getData();
Log.v(DEBUG_标记,“获得联系结果:”
+result.toString());
//从Uri获取联系人id
字符串id=result.getLastPathSegment();
cursor=getContentResolver().query(Phone.CONTENT\u URI,
null,Phone.CONTACT_ID+“=?”,新字符串[]{ID},
无效);
int PhoneIdx=cursor.getColumnIndex(Phone.DATA);
if(cursor.moveToFirst()){
phone=cursor.getString(PhoneIdx);
Log.v(DEBUG_标签,“Got number:+phone”);
}否则{
Log.w(调试标签,“无结果”);
}
}捕获(例外e){
Log.e(调试标签“编号失败”,e);
} 
最后{
如果(光标!=null){
cursor.close();
}
emailEntry.setText(电话);
if(phone.length()==0){
Toast.makeText(这是“找不到联系人号码”,
Toast.LENGTH_LONG).show();
}
}
打破
}
}否则{
w(调试标签,“警告:活动结果不正常”);
}
}
}
您有这个

  EditText emailEntry = (EditText) findViewById(R.id.invite_email);
外部
onCreate
。您将获得
nullpointeeexception

改为

private EditText emailEntry; 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    emailEntry = (EditText) findViewById(R.id.invite_email); 
}

findViewById
在当前扩展的布局中查找id为的视图。您需要先将内容设置为“活动”,然后在
onCreate

中初始化视图。此行将显示一个错误

EditText emailEntry = (EditText) findViewById(R.id.invite_email);
在设置内容之前,不能尝试初始化
视图。在
setContentView()之后初始化它,如下所示

 EditText emailEntry;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // not until here
    emailEntry = (EditText) findViewById(R.id.invite_email);

由于您的视图存在于布局中,因此在使用充气器或setContentView()充气布局之前,您无法使用findViewById()找到它们。

在我看来,他似乎非常喜欢library@tolgap我在标签或问题中没有看到任何与机器人世界相关的东西。当然,您在正确的帖子上发表了评论。您可以将依赖项注入与RoboGuice(而不是RoboSpice)一起使用,并在
onCreate()
之外使用类似的语法。我也不是说他必须使用它。这只是一个建议。@tolgap如果你可以使用框架中提供的东西,为什么你需要一个第三方库,而我没有看到op在任何地方提到robospice,你的评论应该在问题下面posted@tolgap无论如何,它仍然不是一个第三方库,如果你能用它实现同样的功能,我不推荐使用它框架。如果你想向op提出建议,你可以在张贴的问题或答案下方留下评论。