У меня проблема с размещением переменной в общих настройках. Я получаю идентификатор контакта, имя и номер из средства выбора контактов, а затем сохраняю их в общем предпочтении, чтобы я мог использовать их в другом действии для добавления в базу данных, но каждый раз, когда я иду, чтобы получить их в этом другом действии, это дает мне номер телефона, когда я спрашиваю имя или идентификатор ??
т. контактная информация активность
id "displays the id"
name "displays name"
phone "displays phone"
вторая активность
id "displays phone number"
name "displays phone number"
phone "displays phone number"
я не понимаю?
вот мой код
класс предпочтений
public class SmsPrefs extends PreferenceActivity {
public static final String ID = "";
public static final String NAME = "";
public static final String NUMBER = "";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.sms_pref);
}
}
получение фрагмента контактной информации
public void getContactData(Intent data){
Context context = this;
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = pref.edit();
ContentResolver cr = getContentResolver();
Uri contactData = data.getData();
Log.v("Contact", contactData.toString());
Cursor c = managedQuery(contactData,null,null,null,null);
if(c.moveToFirst()){
id = contactData.getLastPathSegment();
editor.putString(SmsPrefs.ID, id);
editor.commit();
Log.v("Contact", "ID: " + id.toString());
name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
editor.putString(SmsPrefs.NAME, name);
editor.commit();
Log.v("Contact", "Name: " + name.toString());
if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = cr.query(Phone.CONTENT_URI,null,Phone.CONTACT_ID +" = ?", new String[]{id}, null);
if(pCur.moveToFirst()){
phone = pCur.getString(pCur.getColumnIndex(Phone.NUMBER));
editor.putString(SmsPrefs.NUMBER, phone);
editor.commit();
Log.v("Contact", "Phone Number: " + phone.toString());
}
pCur.close();
}
}
c.close();
}
если я получу 3 значения из общих настроек, находясь еще в этом упражнении, я получу правильные значения
второй фрагмент активности
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = new String ("name");
String id = new String ("id");
String phone = new String ("number");
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(v.getContext());
id = pref.getString(SmsPrefs.ID, "");
name = pref.getString(SmsPrefs.NAME, "");
phone = pref.getString(SmsPrefs.NUMBER, "");
Log.v("EditContact", "ID: " + id);
Log.v("EditContact", "Name: " + name);
Log.v("EditContact", "Phone: " + phone);
db.open();
db.deleteContact(7);
db.close();
db.open();
long _id;
_id = db.insertContact(phone, name, nColor, nVibrate, ringTonePath);
db.close();
Log.v("EditContact", "ID: " + _id);
Intent ok = new Intent(EditContact.this,Contacts.class);
startActivity(ok);
}
});
Я не понимаю, как это меняется, когда они используются только 2 раза