2012-11-26 37 views
2

我试图使用共享首选项存储引脚,因为我有两个不同的活动,它们是EnterPin和ConfirmPin。使用共享首选项将引脚存储在Android应用程序

对于EnterPin,我有 [启动代码]

package com.example.textsmslock; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.v4.app.NavUtils; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class EnterPin extends Activity { 
public String[] pin = new String[4]; 
public Button[] buttons = new Button[10]; 
public int counter = 0; 
public String FILENAME = "pin_file"; 
public static final String PinCode = "1234"; 

    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_enter_pin); 
    //getActionBar().setDisplayHomeAsUpEnabled(true); 

    buttons[1] = (Button)findViewById(R.id.button1); 
    buttons[2] = (Button)findViewById(R.id.button2); 
    buttons[3] = (Button)findViewById(R.id.button3); 
    buttons[4] = (Button)findViewById(R.id.button4); 
    buttons[5] = (Button)findViewById(R.id.button5); 
    buttons[6] = (Button)findViewById(R.id.button6); 
    buttons[7] = (Button)findViewById(R.id.button7); 
    buttons[8] = (Button)findViewById(R.id.button8); 
    buttons[9] = (Button)findViewById(R.id.button9); 
    buttons[0] = (Button)findViewById(R.id.button0); 


    //Restore the preferences 
    SharedPreferences settings = getSharedPreferences(PinCode, 0); 


} 
public void button1(View view) 
{ 
    if(counter < 3) 
    { 
     pin[counter] = "1"; 
     counter++; 
    } 
    else 
    { 
     PinEntered(); 
    } 
} 
public void button2(View view) 
{ 
    if(counter < 3) 
    { 
     pin[counter] = "2"; 
     counter++; 
    } 
    else 
    { 
     PinEntered(); 
    } 
} 
public void button3(View view) 
{ 
    if(counter < 3) 
    { 
     pin[counter] = "3"; 
     counter++; 
    } 
    else 
    { 
     PinEntered(); 
    } 
} 
public void button4(View view) 
{ 
    if(counter < 3) 
    { 
     pin[counter] = "4"; 
     counter++; 
    } 
    else 
    { 
     PinEntered(); 
    } 
} 
public void button5(View view) 
{ 
    if(counter < 3) 
    { 
     pin[counter] = "5"; 
     counter++; 
    } 
    else 
    { 
     PinEntered(); 
    } 
} 
public void button6(View view) 
{ 
    if(counter < 3) 
    { 
     pin[counter] = "6"; 
     counter++; 
    } 
    else 
    { 
     PinEntered(); 
    } 
} 
public void button7(View view) 
{ 
    if(counter < 3) 
    { 
     pin[counter] = "7"; 
     counter++; 
    } 
    else 
    { 
     PinEntered(); 
    } 
} 
public void button8(View view) 
{ 
    if(counter < 3) 
    { 
     pin[counter] = "8"; 
     counter++; 
    } 
    else 
    { 
     PinEntered(); 
    } 
} 
public void button9(View view) 
{ 
    if(counter < 3) 
    { 
     pin[counter] = "9"; 
     counter++; 
    } 
    else 
    { 
     PinEntered(); 
    } 
} 
public void button0(View view) 
{ 
    if(counter < 3) 
    { 
     pin[counter] = "0"; 
     counter++; 
    } 
    else 
    { 
     PinEntered(); 
    } 
} 
public void PinEntered() 
{ 
if(counter == 3) 
    { 
     putString(pin,0); 

    } 
} 
} 

[终​​止码]

为ConfirmPin我有 [启动代码]

package com.example.textsmslock; 

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 

import android.os.Bundle; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.support.v4.app.NavUtils; 

public class ConfirmPin extends EnterPin { 
public String[] pinconfirm = new String[4]; 
public Button[] buttons = new Button[10]; 
public int counter = 0; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_confirm_pin); 
    //getActionBar().setDisplayHomeAsUpEnabled(true); 
    buttons[1] = (Button)findViewById(R.id.button1); 
    buttons[2] = (Button)findViewById(R.id.button2); 
    buttons[3] = (Button)findViewById(R.id.button3); 
    buttons[4] = (Button)findViewById(R.id.button4); 
    buttons[5] = (Button)findViewById(R.id.button5); 
    buttons[6] = (Button)findViewById(R.id.button6); 
    buttons[7] = (Button)findViewById(R.id.button7); 
    buttons[8] = (Button)findViewById(R.id.button8); 
    buttons[9] = (Button)findViewById(R.id.button9); 
    buttons[0] = (Button)findViewById(R.id.button0); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_confirm_pin, menu); 
    return true; 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
public void button1(View view) 
{ 
    if(counter < 3) 
    { 
     pinconfirm[counter] = "1"; 
     counter++; 
    } 
    else 
    { 
     ConfirmingPin(); 
    } 
} 
public void button2(View view) 
{ 
    if(counter < 3) 
    { 
     pinconfirm[counter] = "2"; 
     counter++; 
    } 
    else 
    { 
     ConfirmingPin(); 
    } 
} 
public void button3(View view) 
{ 
    if(counter < 3) 
    { 
     pinconfirm[counter] = "3"; 
     counter++; 
    } 
    else 
    { 
     ConfirmingPin(); 
    } 
} 
public void button4(View view) 
{ 
    if(counter < 3) 
    { 
     pinconfirm[counter] = "4"; 
     counter++; 
    } 
    else 
    { 
     ConfirmingPin(); 
    } 
} 
public void button5(View view) 
{ 
    if(counter < 3) 
    { 
     pinconfirm[counter] = "5"; 
     counter++; 
    } 
    else 
    { 
     ConfirmingPin(); 
    } 
} 
public void button6(View view) 
{ 
    if(counter < 3) 
    { 
     pinconfirm[counter] = "6"; 
     counter++; 
    } 
    else 
    { 
     ConfirmingPin(); 
    } 
} 
public void button7(View view) 
{ 
    if(counter < 3) 
    { 
     pinconfirm[counter] = "7"; 
     counter++; 
    } 
    else 
    { 
     ConfirmingPin(); 
    } 
} 
public void button8(View view) 
{ 
    if(counter < 3) 
    { 
     pinconfirm[counter] = "8"; 
     counter++; 
    } 
    else 
    { 
     ConfirmingPin(); 
    } 
} 
public void button9(View view) 
{ 
    if(counter < 3) 
    { 
     pinconfirm[counter] = "9"; 
     counter++; 
    } 
    else 
    { 
     ConfirmingPin(); 
    } 
} 
public void button0(View view) 
{ 
    if(counter < 3) 
    { 
     pinconfirm[counter] = "0"; 
     counter++; 
    } 
    else 
    { 
     ConfirmingPin(); 
    } 
} 

public void ConfirmingPin() 
{ 
      SharedPreferences settings = getSharedPreferences(PinCode, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putString(pinconfirm, 0); 

     editor.commit(); 
} 
} 

我得到一个错误当我打电话给putString时,有人可以向我解释为什么?我是不是正确地做了sharedPreferences?

+0

你会得到什么异常?将其添加到您的问题。 –

+0

可能是因为0不是一个字符串? – njzk2

+0

加pinconfirm不是一个字符串? – njzk2

回答

1

您使用的是错误类型的putString(String key, String value)。 你试图作为putString(); 另外,作为值的键添加的stringarray代替string为同一putString();您要添加的int这应该是string为好。如果您wan't在pinconfirm第一项:

editor.putString("PIN", pinconfirm[0].ToString()); 

如果你想从阵列中添加的一切,你可以不喜欢它保存为一个单一的commaseperated字符串:

StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < pinconfirm.length; i++) { 
    sb.append(pinconfirm[i]).append(","); 
} 
editor.putString("pinconfirm", sb.toString()); 

然后当你从SharedPreferences得到字符串只是简单地解析它:

String[] pinconfirm= pinconfirms.split(","); 
+0

'putString'的第一个参数也必须是一个字符串。因此'pinconfirm'应该替换为一些字符串,例如' “PIN”'。 –

+0

你说得对。一点编辑我的答案! – Thomas

+0

好的。感谢您的答复。 –