【问题标题】:How to store the phone number in another variable如何将电话号码存储在另一个变量中
【发布时间】:2020-06-28 17:54:50
【问题描述】:

我正在尝试创建一个应用程序(计算器),它从联系人列表中获取该人的电话号码并保存它。该应用程序的目的是让它看起来像一个普通的计算器,你问你的受害者随机问题,比如他/她的出生日期、年龄、鞋码等,然后在两者之间添加随机数学运算符,让它看起来像你在做一个魔术......一旦你按下“=”来获得答案,之前存储的联系人列表中的电话号码应该出现在它的屏幕上。让它看起来像一个魔术。

但我一开始无法找到获取电话号码的方法

String number = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

似乎不起作用,应用程序崩溃了

这是整个代码以防万一

public class MainActivity<string> extends AppCompatActivity {

    private TextView Screen;
    Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
    private final int PICK_CONTACT = 1;
    public void callContacts(View v) {

        Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
        startActivityForResult(intent, PICK_CONTACT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case (PICK_CONTACT):
                if (resultCode == Activity.RESULT_OK) {
                    Uri contactData = data.getData();
                    Cursor c = managedQuery(contactData, null, null, null, null);
                    if (c.moveToFirst()) {
                        String number = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    }


                }
                break;
        }
    }

    private Button zero,one,two,three,four,five,six,seven,eight,nine,delete,dot,plus,minus,multiply,divide,equals;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Screen=findViewById(R.id.textView);
        zero=findViewById(R.id.Button_0);
        one=findViewById(R.id.Button_1);
        two=findViewById(R.id.Button_2);
        three=findViewById(R.id.Button_3);
        four=findViewById(R.id.Button_4);
        five=findViewById(R.id.Button_5);
        six=findViewById(R.id.Button_6);
        seven=findViewById(R.id.Button_7);
        eight=findViewById(R.id.Button_8);
        nine=findViewById(R.id.Button_9);
        delete=findViewById(R.id.Button_delete);
        dot=findViewById(R.id.Button_dot);
        plus=findViewById(R.id.Button_add);
        minus=findViewById(R.id.Button_subtract);
        multiply=findViewById(R.id.Button_multiply);
        divide=findViewById(R.id.Button_divide);
        equals=findViewById(R.id.Button_result);

        zero.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + "0");
            }
        });
        one.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + "1");
            }
        });
        two.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + "2");
            }
        });
        three.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + "3");
            }
        });
        four.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + "4");
            }
        });
        five.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + "5");
            }
        });
        six.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + "6");
            }
        });
        seven.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + "7");
            }
        });
        eight.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + "8");
            }
        });
        nine.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + "9");
            }
        });
        dot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + ".");
            }
        });
        divide.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + " % ");
            }
        });
        multiply.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + " x ");
            }
        });
        minus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + "-");
            }
        });
        plus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Screen.setText(Screen.getText() + "+");
            }
        });
        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(Screen.getText()!="") {
                    String text = Screen.getText().toString();
                    Screen.setText(text.substring(0, text.length() - 1));
                }
            }
        });

        delete.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Screen.setText(" ");

                return false;
            }
        });
        seven.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                startActivityForResult(intent, PICK_CONTACT);
                return false;
            }
        });

    }
}

【问题讨论】:

  • 尝试在类下直接声明变量(作为实例变量)。

标签: android contacts


【解决方案1】:

这是您在联系人列表中获取所选电话号码的方法:

在活动结果中:

 var myPhoneNumber = ""
 var cursor : Cursor? = null
        try {
            cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null)
            myPhoneNumber = if (cursor?.count ?: 0 > 0) {
                val selectedPhoneNumber = getPhoneNumber(data.data)
                selectedPhoneNumber.replace("\\D+".toRegex(), "")
            } else {
                getPhoneNumber(data.data)
            }
        } catch (e: Exception) {
            e.printStackTrace()
        } finally {
            cursor?.close()
        }

getPhoneNumber() 是:

private fun getPhoneNumber(data: Uri): String {
    var cursor: Cursor? = null
    return try {
        cursor = contentResolver.query(data, null, null, null, null)
        cursor?.moveToFirst()
        val columnIndex = cursor?.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)
        cursor?.getString(columnIndex ?: 0) ?: data.authority!!
    } catch (e: Exception) {
        ""
    } finally {
        cursor?.close()
    }
}

最后,您将在变量 myPhoneNumber 中获得选定的电话号码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    相关资源
    最近更新 更多