Android 如何将电话号码数组保存到SharedReference中

Android 如何将电话号码数组保存到SharedReference中,android,sharedpreferences,android-contacts,Android,Sharedpreferences,Android Contacts,我想使用SharedReference保存电话号码。由于它是从电话簿中提取并设置在textView中,我无法将它们全部保存在SharedReference中。请帮助我了解如何通过SharedReference保存和检索一组电话号码(数组或集合),并将其发送到另一个片段以发送该号码的消息 Contact.java package com.kamal.sos10; import android.content.ContentResolver; import android.content.Cont

我想使用SharedReference保存电话号码。由于它是从电话簿中提取并设置在textView中,我无法将它们全部保存在SharedReference中。请帮助我了解如何通过SharedReference保存和检索一组电话号码(数组或集合),并将其发送到另一个片段以发送该号码的消息

Contact.java

package com.kamal.sos10;

import android.content.ContentResolver;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.nfc.Tag;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.content.Intent;
import android.widget.TextView;
import android.widget.Toast;

import java.lang.reflect.Array;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Contact extends AppCompatActivity {

EditText msg,editText2,editText3,editText4;
Button con1,con2,con3;
TextView textView3,textView5,textView6,textView7,textView8,textView9;

TextView text1;
//  static final int PICK_CONTACT = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contact);

    msg=(EditText)findViewById(R.id.msg);
   // editText2=(EditText)findViewById(R.id.editText2);

    textView3=(TextView)findViewById(R.id.textView3);
  //  text1=(TextView)findViewById(R.id.first);
    textView5=(TextView)findViewById(R.id.textView5);
    textView6=(TextView)findViewById(R.id.textView6);
    textView7=(TextView)findViewById(R.id.textView7);
    textView8=(TextView)findViewById(R.id.textView8);
    textView9=(TextView)findViewById(R.id.textView9);
    con1=(Button)findViewById(R.id.con1);
    con2=(Button)findViewById(R.id.con2);
    con3=(Button)findViewById(R.id.con3);

    con1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.putExtra("extra_text1", "1");
            intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
             if (intent.resolveActivity(Contact.this.getPackageManager()) != null) {
                startActivityForResult(intent, 1);
            }
        }
    });

    con2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.putExtra("extra_text2", "2");
            intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
            if (intent.resolveActivity(Contact.this.getPackageManager()) != null) {
                startActivityForResult(intent,2);
            }
        }
    });

    con3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.putExtra("extra_text3", "3");
            intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
            if (intent.resolveActivity(Contact.this.getPackageManager()) != null) {
                startActivityForResult(intent, 3);
            }
        }
    });
    int num = Integer.valueOf(textView3.getText().toString());
    int num2 = Integer.valueOf(textView6.getText().toString());
    int num3 = Integer.valueOf(textView7.getText().toString());
    Integer[] array=new Integer[3];
    array[0]=num;
    array[1]=num;
    array[2]=num;

    for (int j=0;j<3;j++)
    {

        Log.i("key", String.valueOf(array[j]));

    }
  /*
   SharedPreferences sharedPreferences=this.getSharedPreferences("com.kamal.sos10", Context.MODE_PRIVATE);

    SharedPreferences.Editor edit = sharedPreferences.edit();
    edit.putInt("array_size", strings.length);
    for(int i=0;i<strings.length; i++)
        edit.putString("array_" + i, strings[i]);
    edit.commit();

    int size = sharedPreferences.getInt("array_size", 0);
    strings = new String[size];
    for(int i=0; i<size; i++) {
       strings[i]= sharedPreferences.getString("array_" + i, null);
        Log.i("sdert",strings[i]);
    }
    */


}


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1 || requestCode == 2 || requestCode == 3) {
        if (resultCode == this.RESULT_OK) {
            contactPicked(data,requestCode);
        }
    }
}

private void contactPicked(Intent data,int req) {
    ContentResolver cr = this.getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    cur.moveToFirst();
    try {
        // getData() method will have the Content Uri of the selected contact
        Uri uri = data.getData();
        //Query the content uri
        cur = this.getContentResolver().query(uri, null, null, null, null);
        cur.moveToFirst();
        // column index of the contact ID
        String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
        // column index of the contact name
        String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        // column index of the phone number
        Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                new String[]{id}, null);
        while (pCur.moveToNext()) {
            String phone = pCur.getString(
                    pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)).replaceAll(" ", "");
            String text1 = getIntent().getStringExtra("extra_text1");
            Toast.makeText(Contact.this, text1, Toast.LENGTH_SHORT).show();

            if (req==1)
            {
                textView3.setText(phone);
                Toast.makeText(Contact.this, textView3.getText(), Toast.LENGTH_SHORT).show();
                int num = Integer.valueOf(textView3.getText().toString());
                Log.i("yut", String.valueOf(num));
                textView5.setText(name);
            }
            if (req==2)
            {
                textView6.setText(phone);
                textView8.setText(name);
            }
            if (req==3)
            {
                textView7.setText(phone);
                textView9.setText(name);
            }



            pCur.close();
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}
}
package com.kamal.sos10;
导入android.content.ContentResolver;
导入android.content.Context;
导入android.content.SharedReferences;
导入android.database.Cursor;
导入android.net.Uri;
导入android.nfc.Tag;
导入android.provider.contacts合同;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.content.Intent;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.lang.reflect.Array;
导入java.util.HashSet;
导入java.util.Map;
导入java.util.Set;
公共类联系人扩展了AppCompatActivity{
EditText消息、editText2、editText3、editText4;
按钮con1、con2、con3;
文本视图文本视图3、文本视图5、文本视图6、文本视图7、文本视图8、文本视图9;
TextView text1;
//静态最终int PICK_触点=1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
msg=(EditText)findViewById(R.id.msg);
//editText2=(EditText)findViewById(R.id.editText2);
textView3=(TextView)findViewById(R.id.textView3);
//text1=(TextView)findViewById(R.id.first);
textView5=(TextView)findViewById(R.id.textView5);
textView6=(TextView)findViewById(R.id.textView6);
textView7=(TextView)findViewById(R.id.textView7);
textView8=(TextView)findViewById(R.id.textView8);
textView9=(TextView)findViewById(R.id.textView9);
con1=(按钮)findViewById(R.id.con1);
con2=(按钮)findViewById(R.id.con2);
con3=(按钮)findViewById(R.id.con3);
con1.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(意向、行动和选择);
意向。额外(“额外文本1”、“1”);
intent.setType(Contacts contract.Contacts.CONTENT\u TYPE);
if(intent.resolveActivity(Contact.this.getPackageManager())!=null){
startActivityForResult(意向,1);
}
}
});
con2.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(意向、行动和选择);
意向。额外(“额外文本2”、“2”);
intent.setType(Contacts contract.Contacts.CONTENT\u TYPE);
if(intent.resolveActivity(Contact.this.getPackageManager())!=null){
startActivityForResult(意向书,2);
}
}
});
con3.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(意向、行动和选择);
意向。额外(“额外文本3”、“3”);
intent.setType(Contacts contract.Contacts.CONTENT\u TYPE);
if(intent.resolveActivity(Contact.this.getPackageManager())!=null){
startActivityForResult(意向,3);
}
}
});
int num=Integer.valueOf(textView3.getText().toString());
int num2=Integer.valueOf(textView6.getText().toString());
int num3=Integer.valueOf(textView7.getText().toString());
整数[]数组=新整数[3];
数组[0]=num;
数组[1]=num;
数组[2]=num;

对于(int j=0;j,您可以将ArrayList/Array/List保存到sharedpreferences,下面是您的方法

    //Retrieve the values
Set<String> set = myScores.getStringSet("key", null);

//Set the values
Set<String> set = new HashSet<String>();
set.addAll(listOfExistingScores);
scoreEditor.putStringSet("key", set);
scoreEditor.commit();
//检索值
Set=myScores.getStringSet(“key”,null);
//设置值
Set=newhashset();
set.addAll(现有核心列表);
scoreEditor.putStringSet(“键”,set);
scoreEditor.commit();
但你可以参考一个链接来获取详细信息和链接。这些都很有用,也很容易理解

对于第二部分将数据发送到片段

con3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    //Just check it here 
     int num = Integer.valueOf(textView3.getText().toString());
    int num2 = Integer.valueOf(textView6.getText().toString());
    int num3 = Integer.valueOf(textView7.getText().toString());
    Integer[] array=new Integer[3];
    array[0]=num;
    array[1]=num;
    array[2]=num;

    for (int j=0;j<3;j++)
    {

        Log.i("key", String.valueOf(array[j]));

    }

        }
    });

我建议保存当前活动/片段中的数据,然后在希望打开的片段中从共享偏好中获取数据,但如果您真的想要获取数据并将数据发送到片段,请考虑链接。

注意:

通过查看您的代码,我认为可能会有大量联系人,因此这意味着您将拥有一个大型数组。我建议您将其存储在数据库中,因为您可以轻松检索/更新/删除任何数据和记录

更新:(在评论中澄清后)

con3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    //Just check it here 
     int num = Integer.valueOf(textView3.getText().toString());
    int num2 = Integer.valueOf(textView6.getText().toString());
    int num3 = Integer.valueOf(textView7.getText().toString());
    Integer[] array=new Integer[3];
    array[0]=num;
    array[1]=num;
    array[2]=num;

    for (int j=0;j<3;j++)
    {

        Log.i("key", String.valueOf(array[j]));

    }

        }
    });
您已经编写了代码,以便在创建时从Textview中获取联系人,我认为Textview中的联系人稍后会更新,而onCreate中的代码在更新之前会运行

进行此更改

con3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    //Just check it here 
     int num = Integer.valueOf(textView3.getText().toString());
    int num2 = Integer.valueOf(textView6.getText().toString());
    int num3 = Integer.valueOf(textView7.getText().toString());
    Integer[] array=new Integer[3];
    array[0]=num;
    array[1]=num;
    array[2]=num;

    for (int j=0;j<3;j++)
    {

        Log.i("key", String.valueOf(array[j]));

    }

        }
    });
con3.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//在这儿查一下
int num=Integer.valueOf(textView3.getText().toString());
int num2=Integer.valueOf(textView6.getText().toString());
int num3=Integer.valueOf(textView7.getText().toString());
整数[]数组=新整数[3];
数组[0]=num;
数组[1]=num;
数组[2]=num;

对于(int j=0;j,您可以将ArrayList/Array/List保存到sharedpreferences,下面是您的方法

    //Retrieve the values
Set<String> set = myScores.getStringSet("key", null);

//Set the values
Set<String> set = new HashSet<String>();
set.addAll(listOfExistingScores);
scoreEditor.putStringSet("key", set);
scoreEditor.commit();
//检索值
Set=myScores.getStringSet(“key”,null);
//设置值
Set=newhashset();
set.addAll(现有核心列表);
scoreEditor.putStringSet(“键”,set);
scoreEditor.commit();
但你可以参考一个链接来获取详细信息和链接。这些都很有用,也很容易理解

对于第二部分将数据发送到片段

con3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    //Just check it here 
     int num = Integer.valueOf(textView3.getText().toString());
    int num2 = Integer.valueOf(textView6.getText().toString());
    int num3 = Integer.valueOf(textView7.getText().toString());
    Integer[] array=new Integer[3];
    array[0]=num;
    array[1]=num;
    array[2]=num;

    for (int j=0;j<3;j++)
    {

        Log.i("key", String.valueOf(array[j]));

    }

        }
    });
好的