简体   繁体   English

为什么我不能更新视图片段phoneNumberEditText?

[英]Why can't I update my view fragment phoneNumberEditText?

I am returning the phone number as a string. 我将电话号码作为字符串返回。 I verified it in my logcat. 我在logcat中进行了验证。 I am trying to use the phoneNumberEditText.setText(phone); 我正在尝试使用phoneNumberEditText.setText(phone); to set the phone number which was defined in the class's scope private EditText phoneNumberEditText; 设置在类的作用域中定义的电话号码private EditText phoneNumberEditText; I also tried casting the phone as CharSequence 我也尝试将手机转换为CharSequence

I keep getting this error 我不断收到这个错误

Caused by: java.lang.NullPointerException at com.mayday.md.common.ContactPickerFragment.onActivityResult(ContactPickerFragment.java:117)

Here is the class. 这是课程。 I catch the result in an activity and pass the parameters to the onActivityResult. 我将结果捕获到活动中,并将参数传递给onActivityResult。

package com.mayday.md.common;

import com.mayday.md.R;
import com.mayday.md.fragment.MessageTextFragment;

import android.app.FragmentManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageButton;


import static android.app.Activity.RESULT_OK;
import static android.content.Intent.ACTION_GET_CONTENT;
import static android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE;
import static android.view.View.OnClickListener;

public class ContactPickerFragment extends Fragment {
    private static final int PICK_CONTACT_REQUEST_ID = 100;

    private ImageButton contactPickerButton;
    private EditText phoneNumberEditText;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.contact_picker_fragment, container, false);

        contactPickerButton = (ImageButton) view.findViewById(R.id.contact_picker_button);
        phoneNumberEditText = (EditText) view.findViewById(R.id.contact_edit_text);


        return view;
    }

//    private OnClickListener contactPickerListener = new OnClickListener() {
//        @Override
//        public void onClick(View view) {
//            launchContactPicker(view);
//        }
//    };

//    @Override
//    public void onViewCreated(View view, Bundle savedInstanceState) {
//        super.onViewCreated(view, savedInstanceState);
//        contactPickerButton.setOnClickListener(contactPickerListener);
//    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        contactPickerButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                 int wizardState = ApplicationSettings.getWizardState(getActivity());
//               if(wizardState != AppConstants.WIZARD_FLAG_HOME_READY){
                     AppConstants.IS_BACK_BUTTON_PRESSED = true;
                     AppConstants.IS_BACK_BUTTON_PRESSED = true;
//               }
                launchContactPicker(v);
            }
        });
    }

    public void launchContactPicker(View view) {
        Intent contactPickerIntent = new Intent(ACTION_GET_CONTENT);
        contactPickerIntent.setType(CONTENT_ITEM_TYPE);
        startActivityForResult(contactPickerIntent, PICK_CONTACT_REQUEST_ID);
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data, Context context) {
        Log.e("ContactPickerFragment", "onActivityResult requestCode "+requestCode);
        Log.e("ContactPickerFragment", "onActivityResult resultCode "+resultCode);
        Log.e("ContactPickerFragment", "onActivityResult data "+data);

        ContentResolver cr = context.getContentResolver();
        Cursor cur = cr.query(data.getData(), null, null, null, null);
        String phone = "";
        if (cur.getCount() > 0) {
            while (cur.moveToNext()) {
                String id = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts._ID));
                Log.e("ContactPickerFragment", "onActivityResult id "+id);
                String name = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                Log.e("ContactPickerFragment", "onActivityResult name "+name);
                if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                    //Query phone here.  Covered next
                    Cursor pCur = cr.query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                            new String[]{id}, null);
                    Log.e("WizardActivity", "onActivityResult pCur "+pCur);
                    while (pCur.moveToNext()) {
                        // Do something with phones
                                phone = pCur.getString(
                                pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        Log.e("ContactPickerFragment", "onActivityResult phone "+phone);
                        }
                    pCur.close();
                }
            }
        }
        Log.e("ContactPickerFragment", "onActivityResult phone "+phone);

        //phoneNumberEditText.setText(phone);
        //phoneNumberEditText.setText((CharSequence)phone);
    }

}

Here is the logcat, I X'd out the actual number and name 这是logcat,我将实际的数字和名称

02-22 19:05:32.302  22501-22501/com.mayday.md E/WizardActivity﹕ onUserInteraction
02-22 19:05:32.392  22501-22501/com.mayday.md E/WizardActivity﹕ onUserInteraction
02-22 19:05:32.392  22501-22501/com.mayday.md E/WizardActivity.onPause﹕ page = setup-contacts
02-22 19:05:32.392  22501-22501/com.mayday.md E/>>>>>>﹕ assert flagRiseFromPause = true
02-22 19:05:32.422  22501-22501/com.mayday.md D/AbsListView﹕ unregisterIRListener() is called
02-22 19:05:33.022  22501-22501/com.mayday.md D/WizardActivity.onStop﹕ page = setup-contacts
02-22 19:05:33.022  22501-22501/com.mayday.md D/AbsListView﹕ onVisibilityChanged() is called, visibility : 4
02-22 19:05:33.022  22501-22501/com.mayday.md D/AbsListView﹕ unregisterIRListener() is called
02-22 19:05:37.512  22501-22501/com.mayday.md E/ContactPickerFragment﹕ onActivityResult requestCode 65636
02-22 19:05:37.512  22501-22501/com.mayday.md E/ContactPickerFragment﹕ onActivityResult resultCode -1
02-22 19:05:37.512  22501-22501/com.mayday.md E/ContactPickerFragment﹕ onActivityResult data Intent { dat=content://com.android.contacts/data/2369 flg=0x1 }
02-22 19:05:37.542  22501-22501/com.mayday.md E/ContactPickerFragment﹕ onActivityResult id 2369
02-22 19:05:37.542  22501-22501/com.mayday.md E/ContactPickerFragment﹕ onActivityResult name XXXX XXXXX
02-22 19:05:37.542  22501-22501/com.mayday.md E/WizardActivity﹕ onActivityResult pCur android.content.ContentResolver$CursorWrapperInner@42d55b78
02-22 19:05:37.542  22501-22501/com.mayday.md E/ContactPickerFragment﹕ onActivityResult phone xxxxxxxxxx
02-22 19:05:37.552  22501-22501/com.mayday.md E/ContactPickerFragment﹕ onActivityResult phone xxxxxxxxxx
02-22 19:05:37.552  22501-22501/com.mayday.md D/AndroidRuntime﹕ Shutting down VM
02-22 19:05:37.552  22501-22501/com.mayday.md W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x4172fda0)
02-22 19:05:37.552  22501-22501/com.mayday.md E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.mayday.md, PID: 22501
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=65636, result=-1, data=Intent { dat=content://com.android.contacts/data/2369 flg=0x1 }} to activity {com.mayday.md/com.mayday.md.WizardActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3663)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3706)
            at android.app.ActivityThread.access$1400(ActivityThread.java:173)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5579)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.mayday.md.common.ContactPickerFragment.onActivityResult(ContactPickerFragment.java:117)
            at com.mayday.md.WizardActivity.onActivityResult(WizardActivity.java:334)
            at android.app.Activity.dispatchActivityResult(Activity.java:5643)
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3659)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3706)
            at android.app.ActivityThread.access$1400(ActivityThread.java:173)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5579)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
            at dalvik.system.NativeStart.main(Native Method)

Just before where you have: 在您拥有的地方之前:

//phoneNumberEditText.setText(phone);
//phoneNumberEditText.setText((CharSequence)phone);

Try adding the following two lines to check whether your control reference or phone number is somehow becoming null: 尝试添加以下两行以检查您的控件参考或电话号码是否以某种方式变为空:

Log.e("phoneNumberEditText is null:" + phoneNumberEditText == null);
Log.e("phone string is null:" + phone == null);

See if either of these are outputting true. 看看这些输出是否为true。

it look the phone from your database is null, you should do the validation/trim the phone before you set into your edit text field. 如果您的数据库中的电话为空,则在设置到编辑文本字段之前,应先进行验证/修剪电话。

phone = phone==null?"":phone.trim();
phoneNumberEditText.setText(phone);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM