2012-11-26 36 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

好的。感謝您的答覆。 –