Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在OnCreate中未正确设置全局变量_Android_Android Activity_Android Runonuithread - Fatal编程技术网

Android 在OnCreate中未正确设置全局变量

Android 在OnCreate中未正确设置全局变量,android,android-activity,android-runonuithread,Android,Android Activity,Android Runonuithread,我试图从用户的电话中提取联系人,然后将这些联系人与我在解析后端中的电话号码进行匹配,然后在自定义列表视图中显示匹配项。我已经成功地完成了几乎所有的事情,但是我很难正确设置全局变量mBinderPhoneNumber。无论出于何种原因,根据logcat,变量首先显示为null,直到后来才获得正确的值,即使我在使用变量之前正确设置了该变量。 以下是logcat,它显示变量最初显示为null,然后才正确设置: 有人能帮我吗? 活动内容如下: public class AddContacts

我试图从用户的电话中提取联系人,然后将这些联系人与我在解析后端中的电话号码进行匹配,然后在自定义列表视图中显示匹配项。我已经成功地完成了几乎所有的事情,但是我很难正确设置全局变量mBinderPhoneNumber。无论出于何种原因,根据logcat,变量首先显示为null,直到后来才获得正确的值,即使我在使用变量之前正确设置了该变量。

以下是logcat,它显示变量最初显示为null,然后才正确设置:

有人能帮我吗?

活动内容如下:

public class AddContactsActivity extends Activity {
    public List mBinderPhoneNumbers;
    Context context = null;
    ContactsAdapter objAdapter;
    ListView lv = null;
    EditText edtSearch = null;
    LinearLayout llContainer = null;
    Button btnOK = null;
    RelativeLayout rlPBContainer = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = this;
        setContentView(R.layout.activity_add_contacts);
        rlPBContainer = (RelativeLayout) findViewById(R.id.pbcontainer);
        edtSearch = (EditText) findViewById(R.id.input_search);
        llContainer = (LinearLayout) findViewById(R.id.data_container);
        btnOK = (Button) findViewById(R.id.ok_button);


        btnOK.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                getSelectedContacts();
            }
        });

        edtSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2,
                                      int arg3) {
                // When user changed the Text
                String text = edtSearch.getText().toString()
                        .toLowerCase(Locale.getDefault());
                objAdapter.filter(text);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                                          int arg2, int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
            }
        });
        // Get parse users
        String [] phoneNumberList = {"DUMMY NUMBER1", "DUMMY NUMBER2", "DUMMY NUMBER3", "DUMMY NUMBER4"};
        ParseQuery<ParseUser> query = ParseUser.getQuery(); {
            query.whereContainedIn("username", Arrays.asList(phoneNumberList));
            query.findInBackground(new FindCallback<ParseUser>() {
                public void done (List<ParseUser> list, ParseException e){
                    if (e == null) {
                        mBinderPhoneNumbers = list;
                        Log.d("TAG", "mBinderPhoneNumbers from onCreate: " + mBinderPhoneNumbers);
                    } else {
                        // Something went wrong.
                        Log.e("TAG", "User query error: " + e);
                    }
                }
            });
        }
        addContactsInList();
    }

    private void getSelectedContacts() {
        // TODO Auto-generated method stub

        StringBuffer sb = new StringBuffer();

        for (ContactObject bean : ContactsListClass.phoneList) {

            if (bean.isSelected()) {
                sb.append(bean.getName());
                sb.append(",");
            }
        }

        String s = sb.toString().trim();

        if (TextUtils.isEmpty(s)) {
            Toast.makeText(context, "Select at least one Contact",
                    Toast.LENGTH_SHORT).show();
        } else {

            s = s.substring(0, s.length() - 1);
            Toast.makeText(context, "Selected Contacts: " + s,
                    Toast.LENGTH_SHORT).show();
        }

    }

    private void addContactsInList() {
        // TODO Auto-generated method stub


        Thread thread = new Thread() {
            @Override
            public void run() {

                showPB();

                try {

                    Cursor phones = getContentResolver().query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null, null, null, null);

                    try {
                        ContactsListClass.phoneList.clear();
                    } catch (Exception e) {

                    }


                    while (phones.moveToNext()) {


                        Log.d("TAG", "mBinderPhoneNumbers from AddContactsInList:" + mBinderPhoneNumbers);
                        if (Arrays.asList(mBinderPhoneNumbers).contains(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER)))) {
                            String phoneName = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER));
                            String phoneImage = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
                            ContactObject cp = new ContactObject();
                            cp.setName(phoneName);
                            cp.setNumber(phoneNumber);
                            cp.setImage(phoneImage);
                            ContactsListClass.phoneList.add(cp);
                        }
                    }
                    phones.close();
                    lv = new ListView(context);
                    lv.setLayoutParams(new LayoutParams(
                            LayoutParams.MATCH_PARENT,
                            LayoutParams.MATCH_PARENT));

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            llContainer.addView(lv);
                        }
                    });

                    Collections.sort(ContactsListClass.phoneList,
                            new Comparator<ContactObject>() {
                                @Override
                                public int compare(ContactObject lhs,
                                                   ContactObject rhs) {
                                    return lhs.getName().compareTo(
                                            rhs.getName());
                                }
                            });

                    objAdapter = new ContactsAdapter(AddContactsActivity.this,
                            ContactsListClass.phoneList);
                    lv.setAdapter(objAdapter);
                    lv.setOnItemClickListener(new OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> parent,
                                                View view, int position, long id) {

                            CheckBox chk = (CheckBox) view
                                    .findViewById(R.id.contactcheck);
                            ContactObject bean = ContactsListClass.phoneList
                                    .get(position);
                            if (bean.isSelected()) {
                                bean.setSelected(false);
                                chk.setChecked(false);
                            } else {
                                bean.setSelected(true);
                                chk.setChecked(true);
                            }

                        }
                    });

                } catch (Exception e) {

                    e.printStackTrace();

                }

                hidePB();

            }
        };

        thread.start();

    }

    void showPB() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                rlPBContainer.setVisibility(View.VISIBLE);
                edtSearch.setVisibility(View.GONE);
                btnOK.setVisibility(View.GONE);
            }
        });
    }

    void hidePB() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                rlPBContainer.setVisibility(View.GONE);
                edtSearch.setVisibility(View.VISIBLE);
                btnOK.setVisibility(View.VISIBLE);
            }
        });
    }

}
公共类AddContactsActivity扩展活动{
公众电话号码列表;
Context=null;
接触式适配器;
ListView lv=null;
EditText-edtSearch=null;
LinearLayout llContainer=null;
按钮btnOK=null;
RelativeLayout rlPBContainer=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
上下文=这个;
setContentView(R.layout.activity\u add\u contacts);
rlPBContainer=(RelativeLayout)findViewById(R.id.pbcontainer);
edtSearch=(EditText)findViewById(R.id.input\u search);
llContainer=(LinearLayout)findViewById(R.id.data\u容器);
btnOK=(按钮)findviewbyd(R.id.ok_按钮);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图arg0){
//TODO自动生成的方法存根
getSelectedContacts();
}
});
edtSearch.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列cs、int arg1、int arg2、,
int arg3){
//当用户更改文本时
String text=edtSearch.getText().toString()
.toLowerCase(Locale.getDefault());
objAdapter.filter(文本);
}
@凌驾
更改前的公共无效(字符序列arg0,int arg1,
整数arg2,整数arg3){
//TODO自动生成的方法存根
}
@凌驾
public void PostTextChanged(可编辑arg0){
//TODO自动生成的方法存根
}
});
//获取解析用户
字符串[]phoneNumberList={“虚拟数字1”、“虚拟数字2”、“虚拟数字3”、“虚拟数字4”};
ParseQuery=ParseUser.getQuery(){
query.whereContainedIn(“用户名”,Arrays.asList(phoneNumberList));
findInBackground(新的FindCallback(){
公共作废完成(列表,异常解析){
如果(e==null){
mBinderPhoneNumbers=列表;
Log.d(“TAG”,“onCreate中的MbinderPhoneNumber:+MbinderPhoneNumber”);
}否则{
//出了点问题。
Log.e(“标签”,“用户查询错误:+e”);
}
}
});
}
addContactsInList();
}
私有void getSelectedContacts(){
//TODO自动生成的方法存根
StringBuffer sb=新的StringBuffer();
for(ContactObject bean:ContactsListClass.phoneList){
if(bean.isSelected()){
sb.append(bean.getName());
某人加上(“,”);
}
}
字符串s=sb.toString().trim();
如果(TextUtils.isEmpty){
Toast.makeText(上下文,“选择至少一个联系人”,
吐司。长度(短)。show();
}否则{
s=s.substring(0,s.length()-1);
Toast.makeText(上下文,“选定联系人:+s,
吐司。长度(短)。show();
}
}
私有void addContactsInList(){
//TODO自动生成的方法存根
线程线程=新线程(){
@凌驾
公开募捐{
showPB();
试一试{
Cursor=getContentResolver().query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,
空,空,空,空);
试一试{
ContactsListClass.phoneList.clear();
}捕获(例外e){
}
while(phones.moveToNext()){
Log.d(“标记”,“来自AddContactsInList的MbinderPhoneNumber:”+MbinderPhoneNumber);
if(Arrays.asList(mbinderPhoneNumber).contains(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NORMALIZED_NUMBER))){
String phoneName=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataTypes.Phone.DISPLAY_NAME));
String phoneNumber=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NORMALIZED_NUMBER));
String phoneImage=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataTypes.Phone.CONTACT_ID));
ContactObject cp=新的ContactObject();
cp.setName(phoneName);
cp.setNumber(电话号码);
cp.setImage(phoneImage);
ContactsListClass.phoneList.add(cp);
}
}
电话。关闭();
lv=新列表视图(上下文);
lv.setLayoutParams(新的LayoutParams(
LayoutParams.MATCH_父级,
public class AddContactsActivity extends Activity {
    public List mBinderPhoneNumbers;
    Context context = null;
    ContactsAdapter objAdapter;
    ListView lv = null;
    EditText edtSearch = null;
    LinearLayout llContainer = null;
    Button btnOK = null;
    RelativeLayout rlPBContainer = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = this;
        setContentView(R.layout.activity_add_contacts);
        rlPBContainer = (RelativeLayout) findViewById(R.id.pbcontainer);
        edtSearch = (EditText) findViewById(R.id.input_search);
        llContainer = (LinearLayout) findViewById(R.id.data_container);
        btnOK = (Button) findViewById(R.id.ok_button);


        btnOK.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                getSelectedContacts();
            }
        });

        edtSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2,
                                      int arg3) {
                // When user changed the Text
                String text = edtSearch.getText().toString()
                        .toLowerCase(Locale.getDefault());
                objAdapter.filter(text);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                                          int arg2, int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
            }
        });
        // Get parse users
        String [] phoneNumberList = {"DUMMY NUMBER1", "DUMMY NUMBER2", "DUMMY NUMBER3", "DUMMY NUMBER4"};
        ParseQuery<ParseUser> query = ParseUser.getQuery(); {
            query.whereContainedIn("username", Arrays.asList(phoneNumberList));
            query.findInBackground(new FindCallback<ParseUser>() {
                public void done (List<ParseUser> list, ParseException e){
                    if (e == null) {
                        mBinderPhoneNumbers = list;
                        Log.d("TAG", "mBinderPhoneNumbers from onCreate: " + mBinderPhoneNumbers);
                    } else {
                        // Something went wrong.
                        Log.e("TAG", "User query error: " + e);
                    }
                }
            });
        }
        addContactsInList();
    }

    private void getSelectedContacts() {
        // TODO Auto-generated method stub

        StringBuffer sb = new StringBuffer();

        for (ContactObject bean : ContactsListClass.phoneList) {

            if (bean.isSelected()) {
                sb.append(bean.getName());
                sb.append(",");
            }
        }

        String s = sb.toString().trim();

        if (TextUtils.isEmpty(s)) {
            Toast.makeText(context, "Select at least one Contact",
                    Toast.LENGTH_SHORT).show();
        } else {

            s = s.substring(0, s.length() - 1);
            Toast.makeText(context, "Selected Contacts: " + s,
                    Toast.LENGTH_SHORT).show();
        }

    }

    private void addContactsInList() {
        // TODO Auto-generated method stub


        Thread thread = new Thread() {
            @Override
            public void run() {

                showPB();

                try {

                    Cursor phones = getContentResolver().query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null, null, null, null);

                    try {
                        ContactsListClass.phoneList.clear();
                    } catch (Exception e) {

                    }


                    while (phones.moveToNext()) {


                        Log.d("TAG", "mBinderPhoneNumbers from AddContactsInList:" + mBinderPhoneNumbers);
                        if (Arrays.asList(mBinderPhoneNumbers).contains(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER)))) {
                            String phoneName = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER));
                            String phoneImage = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
                            ContactObject cp = new ContactObject();
                            cp.setName(phoneName);
                            cp.setNumber(phoneNumber);
                            cp.setImage(phoneImage);
                            ContactsListClass.phoneList.add(cp);
                        }
                    }
                    phones.close();
                    lv = new ListView(context);
                    lv.setLayoutParams(new LayoutParams(
                            LayoutParams.MATCH_PARENT,
                            LayoutParams.MATCH_PARENT));

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            llContainer.addView(lv);
                        }
                    });

                    Collections.sort(ContactsListClass.phoneList,
                            new Comparator<ContactObject>() {
                                @Override
                                public int compare(ContactObject lhs,
                                                   ContactObject rhs) {
                                    return lhs.getName().compareTo(
                                            rhs.getName());
                                }
                            });

                    objAdapter = new ContactsAdapter(AddContactsActivity.this,
                            ContactsListClass.phoneList);
                    lv.setAdapter(objAdapter);
                    lv.setOnItemClickListener(new OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> parent,
                                                View view, int position, long id) {

                            CheckBox chk = (CheckBox) view
                                    .findViewById(R.id.contactcheck);
                            ContactObject bean = ContactsListClass.phoneList
                                    .get(position);
                            if (bean.isSelected()) {
                                bean.setSelected(false);
                                chk.setChecked(false);
                            } else {
                                bean.setSelected(true);
                                chk.setChecked(true);
                            }

                        }
                    });

                } catch (Exception e) {

                    e.printStackTrace();

                }

                hidePB();

            }
        };

        thread.start();

    }

    void showPB() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                rlPBContainer.setVisibility(View.VISIBLE);
                edtSearch.setVisibility(View.GONE);
                btnOK.setVisibility(View.GONE);
            }
        });
    }

    void hidePB() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                rlPBContainer.setVisibility(View.GONE);
                edtSearch.setVisibility(View.VISIBLE);
                btnOK.setVisibility(View.VISIBLE);
            }
        });
    }

}
     query.findInBackground(new FindCallback<ParseUser>() {
                    public void done (List<ParseUser> list, ParseException e){
                        if (e == null) {
                            mBinderPhoneNumbers = list;
                            addContactsInList();// call here
                            Log.d("TAG", "mBinderPhoneNumbers from onCreate: " + mBinderPhoneNumbers);
                        } else {
                            // Something went wrong.
                            Log.e("TAG", "User query error: " + e);
                        }
                    }
                });
query.findInBackground(new FindCallback<ParseUser>() {
    public void done (List<ParseUser> list, ParseException e){
        if (e == null) {
            mBinderPhoneNumbers = list;
            addContactsInList();
            .....
        }
    }
});