Java 联系人选取器活动存储数据,除非按下后退按钮

Java 联系人选取器活动存储数据,除非按下后退按钮,java,android,Java,Android,我已经搜索了&搜索了,但似乎无法找到答案: 我有一个活动打开,然后你按下一个按钮,打开联系人选择器。选择“联系人”后,它将返回“活动”,并将名称和放在各自的框中。现在,我按下home(主页)按钮,再次选择应用程序以重新打开,值仍然是它们的。。这很好,但当我按下“后退”按钮时,我的程序将关闭,当重新打开时,程序将丢失其值 public class speed_dial_setup extends Activity { /** Called when the activity is first cr

我已经搜索了&搜索了,但似乎无法找到答案: 我有一个活动打开,然后你按下一个按钮,打开联系人选择器。选择“联系人”后,它将返回“活动”,并将名称和放在各自的框中。现在,我按下home(主页)按钮,再次选择应用程序以重新打开,值仍然是它们的。。这很好,但当我按下“后退”按钮时,我的程序将关闭,当重新打开时,程序将丢失其值

public class speed_dial_setup extends Activity {
/** Called when the activity is first created. */
 private static final int CONTACT_PICKER_RESULT1 = 1001;
 private static final int CONTACT_PICKER_RESULT2 = 2002;
 private static final int CONTACT_PICKER_RESULT3 = 3003;
 private static final int CONTACT_PICKER_RESULT4 = 4004;
 private static final int CONTACT_PICKER_RESULT5 = 5005;
private static final String DEBUG_TAG = null;
EditText pNumber1;
Button cPICKER1,cPICKER2,cPICKER3,cPICKER4, cPICKER5;
// SharedPreferences sharedPref = getSharedPreferences("pNumber1",MODE_PRIVATE);
// String webViewChoice = sharedPref.getString("pNumber1","null"); 

private static final String empty = "";
private static String selectedNumber = "", selectedName = "";
private static String phoneNumber = "", phoneName = ""; 
public static String name1 = "", name2 = "", name3 = "", name4 = "", name5 = "";
public static String phone1 = "", phone2 = "", phone3 = "", phone4 = "", phone5 = "";

private EditText phName1, phName2, phName3, phName4, phName5;
private EditText phNumb1, phNumb2, phNumb3, phNumb4, phNumb5;

SharedPreferences sharedPref;
SharedPreferences.Editor prefEditor;

private static int phoneIdx = 0, nameIdx = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    cPICKER1 = (Button) findViewById(R.id.do_email_picker1);
    cPICKER2 = (Button) findViewById(R.id.do_email_picker2);
    cPICKER3 = (Button) findViewById(R.id.do_email_picker3);
    cPICKER4 = (Button) findViewById(R.id.do_email_picker4);
    cPICKER5 = (Button) findViewById(R.id.do_email_picker5);

    phName1 = (EditText) findViewById(R.id.name_text1);
    phName2 = (EditText) findViewById(R.id.name_text2);
    phName3 = (EditText) findViewById(R.id.name_text3);
    phName4 = (EditText) findViewById(R.id.name_text4);
    phName5 = (EditText) findViewById(R.id.name_text5);

    phNumb1 = (EditText) findViewById(R.id.phone_number1);
    phNumb2 = (EditText) findViewById(R.id.phone_number2);
    phNumb3 = (EditText) findViewById(R.id.phone_number3);
    phNumb4 = (EditText) findViewById(R.id.phone_number4);
    phNumb5 = (EditText) findViewById(R.id.phone_number5);

        pNumber1 = (EditText) findViewById(R.id.phone_number1);

    cPICKER1.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
             Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
                        Contacts.CONTENT_URI);
                startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT1);

        }
    });


    cPICKER2.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        // TODO Auto-generated method stub
         Intent contactPickerIntent2 = new Intent(Intent.ACTION_PICK,
                    Contacts.CONTENT_URI);
            startActivityForResult(contactPickerIntent2, CONTACT_PICKER_RESULT2);

    }
});


cPICKER3.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        // TODO Auto-generated method stub
         Intent contactPickerIntent3 = new Intent(Intent.ACTION_PICK,
                    Contacts.CONTENT_URI);
            startActivityForResult(contactPickerIntent3, CONTACT_PICKER_RESULT3);

    }
});

cPICKER4.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        // TODO Auto-generated method stub
         Intent contactPickerIntent4 = new Intent(Intent.ACTION_PICK,
                    Contacts.CONTENT_URI);
            startActivityForResult(contactPickerIntent4, CONTACT_PICKER_RESULT4);

    }
});


cPICKER5.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        // TODO Auto-generated method stub
         Intent contactPickerIntent5 = new Intent(Intent.ACTION_PICK,
                    Contacts.CONTENT_URI);
            startActivityForResult(contactPickerIntent5, CONTACT_PICKER_RESULT4);

    }
});

    }

   protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (resultCode == RESULT_OK)
    {           
        Cursor cursor = null;  
        phoneNumber = "";
        phoneName   = "";

        List<String> allNumbers = new ArrayList<String>();


        try 
        {  
            Uri result = data.getData();  
            String id = result.getLastPathSegment(); 

            cursor = getContentResolver().query(Phone.CONTENT_URI, null, 
                Phone.CONTACT_ID + "=?", new String[] { id }, null);  

            phoneIdx = cursor.getColumnIndex(Phone.DATA);                    
            nameIdx  = cursor.getColumnIndex(Phone.DISPLAY_NAME);

            if (cursor.moveToFirst()) {
                while (cursor.isAfterLast() == false) {
                    phoneNumber = cursor.getString(phoneIdx);
                    phoneName = cursor.getString(nameIdx);

                    allNumbers.add(phoneNumber);
                    cursor.moveToNext();
                }
            } 
            else 
            {
                //no results actions
            }                
        } 
        catch (Exception e) 
        {  
           //error actions
        } 
        finally 
        {  
            if (cursor != null)
            {  
                cursor.close();
            }

        final CharSequence[] items = allNumbers.toArray(new String[allNumbers.size()]);
        AlertDialog.Builder builder = new AlertDialog.Builder(speed_dial_setup.this);
        builder.setTitle("Choose a number");
        builder.setItems(items, new DialogInterface.OnClickListener() 
        {
            public void onClick(DialogInterface dialog, int item) 
            {
                selectedNumber = items[item].toString();
                selectedNumber = selectedNumber.replace("-", "");
            }
        });

        AlertDialog alert = builder.create();

        if(allNumbers.size() > 1) 
        {
            alert.show();
        }
        else 
        {
            selectedNumber = phoneNumber.toString();
            selectedNumber = selectedNumber.replace("-", "");

            selectedName = phoneName.toString();
        }

        if (phoneNumber.length() == 0) 
        {
            Toast.makeText(this, "No phone number found for contact.",  
                    Toast.LENGTH_LONG).show();   
        }
        }
    }
    else 
    {
        Log.w(DEBUG_TAG, "Warning: activity result not ok");
    } 

    /*********/
    switch (requestCode) 
    {  
    case CONTACT_PICKER_RESULT1:
        phNumb1.setText(selectedNumber);
        phName1.setText(selectedName);

        name1 = selectedName;
        phone1 = selectedNumber;

        SharedPreferences sharedPref = getSharedPreferences("com.pick.contact",MODE_PRIVATE); 
        SharedPreferences.Editor prefEditor = sharedPref.edit(); 
        prefEditor.putString("pNumber1",selectedNumber); 
        prefEditor.commit(); 

        System.err.println("Chp1, phoneNumber = "+phoneNumber+" phoneName = "+phoneName);
        break;

    case CONTACT_PICKER_RESULT2:
        phNumb2.setText(selectedNumber);
        phName2.setText(selectedName);

        name2 = selectedName;
        phone2 = selectedNumber;

        sharedPref = getSharedPreferences("com.pick.contact",MODE_PRIVATE); 
        prefEditor = sharedPref.edit(); 
        prefEditor.putString("pNumber1",selectedNumber); 
        prefEditor.commit(); 

        System.err.println("Chp2, phoneNumber = "+phoneNumber+" phoneName = "+phoneName);
        break;  

    case CONTACT_PICKER_RESULT3:
        phNumb3.setText(selectedNumber);
        phName3.setText(selectedName);

        name3 = selectedName;
        phone3 = selectedNumber;

        sharedPref = getSharedPreferences("com.pick.contact",MODE_PRIVATE); 
        prefEditor = sharedPref.edit(); 
        prefEditor.putString("pNumber1",selectedNumber); 
        prefEditor.commit(); 

        System.err.println("Chp3, phoneNumber = "+phoneNumber+" phoneName = "+phoneName);
        break;      

    case CONTACT_PICKER_RESULT4:
        phNumb4.setText(selectedNumber);
        phName4.setText(selectedName);

        name4 = selectedName;
        phone4 = selectedNumber;

        sharedPref = getSharedPreferences("com.pick.contact",MODE_PRIVATE); 
        prefEditor = sharedPref.edit(); 
        prefEditor.putString("pNumber1",selectedNumber); 
        prefEditor.commit(); 

        System.err.println("Chp4, phoneNumber = "+phoneNumber+" phoneName = "+phoneName);
        break; 

    case CONTACT_PICKER_RESULT5:
        phNumb5.setText(selectedNumber);
        phName5.setText(selectedName);

        name5 = selectedName;
        phone5 = selectedNumber;

        sharedPref = getSharedPreferences("com.pick.contact",MODE_PRIVATE); 
        prefEditor = sharedPref.edit(); 
        prefEditor.putString("pNumber1",selectedNumber); 
        prefEditor.commit(); 

        System.err.println("Chp5, phoneNumber = "+phoneNumber+" phoneName = "+phoneName);
        break;  
    }
}


@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    super.onPause();
    SharedPreferences sharedPref = getSharedPreferences("speed_dial_setup",MODE_PRIVATE);
    SharedPreferences.Editor prefEditor = sharedPref.edit();
    prefEditor.putString("pNumber1","phone_number");
    prefEditor.commit(); 

}


@Override
protected void onStop() {
    // TODO Auto-generated method stub
    // super.onStop();
    super.onPause();
    SharedPreferences sharedPref = getSharedPreferences("speed_dial_setup",MODE_PRIVATE);
    SharedPreferences.Editor prefEditor = sharedPref.edit();
    prefEditor.putString("pNumber1","phone_number");
    prefEditor.commit(); 
}


@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    SharedPreferences sharedPref = getSharedPreferences("speed_dial_setup",MODE_PRIVATE);
    SharedPreferences.Editor prefEditor = sharedPref.edit();
    prefEditor.putString("pNumber1","phone_number");
    prefEditor.commit(); 
}


@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    //super.onDestroy();
    super.onPause();
    SharedPreferences sharedPref = getSharedPreferences("speed_dial_setup",MODE_PRIVATE);
    SharedPreferences.Editor prefEditor = sharedPref.edit();
    prefEditor.putString("pNumber1","phone_number");
    prefEditor.commit(); 
}
}

你有什么问题?这就是它的工作原理。如果它在后台仍处于打开状态,则它仍处于打开状态。但如果你按回去,它就完成了。有点像叫finish


保存需要保存在onPause、onStop或onDestroy功能中的任何状态。

当按下后退按钮时,该活动将完成。因此,我建议将您需要的数据保存到SharedReference中。当应用程序重新打开时,从共享首选项加载信息

编辑:

下面是一个使用SharedReference的示例

public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";

@Override
protected void onCreate(Bundle state){
   super.onCreate(state);
   . . .

   // Restore preferences
   SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
   String My_String = settings.getString("item", "No item availible");
   int my_int = settings.getInt("integerItem", 0);

}

@Override
protected void onStop(){
   super.onStop();

  // We need an Editor object to make preference changes.
  // All objects are from android.context.Context
  SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
  SharedPreferences.Editor editor = settings.edit();
  editor.putString("item", My_item); // the first parameter is the Key, and the second being the variable
  editor.putInt("integerItem" item_number);

  // Commit the edits!
  editor.commit();
}

}

logcat中的eror是什么?此代码不这样做吗?SharedPreferences sharedPref=GetSharedPreferencespeed\u dial\u setup,MODE\u PRIVATE;SharedPreferences.Editor prefEditor=sharedPref.edit;prefEditor.putStringpNumber1,电话号码;prefEditor.commit;那么,它不是在onCreate中被调用以获取以前的数据吗?什么是读取SharedPrefs的代码?PREF_名称是xml/myprefs.xml中存储它们值的文件吗?Thanksys PREF_NAME=您的_PREF_文件,或者您可以将myPrefs替换为变量。例如,我刚才使用了变量。