2016-12-10 41 views
0

我對此很感興趣,並在製作應用程序方面取得穩步進展。我想創建一個應用程序,允許用戶使用滑塊生成隨機密碼來設置長度,然後生成它。一旦完成,我希望用戶能夠保存他們生成的密碼。到目前爲止,我已經實現了一切,除了保存密碼以便在應用程序關閉後進行恢復。我已經閱讀了很多文章,並且我只是不知道如何在應用程序關閉後保存應用程序數據,天氣是文件還是SharedPrefrences。一些澄清和幫助將非常感激。如何在Android中保存TextView/Array並稍後檢索?

我想實現

我想,當他們關閉它的用戶點擊,他們已經生成的密碼(存儲在該數組中)被保存在應用程序,然後一個按鈕,來什麼回來後,他們可以檢索這些保存的密碼。

感謝大家在先進的,我做我的乞求原諒有關的代碼它可能非常混亂,但我學習:d

感謝

-Jack

MainActivity Screenshot

主要活動XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.jrfapplications.passgen.MainActivity"> 

    <SeekBar 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/passdesc" 
     android:layout_marginTop="27dp" 
     android:id="@+id/seekBar" 
     android:max="20" 
     android:progress="10" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

    <Button 
     android:text="@string/passbutton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button" 
     android:textSize="12sp" 
     android:onClick="genpass" 
     android:layout_marginTop="40dp" 
     android:layout_below="@+id/seekBar" 
     android:layout_centerHorizontal="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/seekBar" 
     android:layout_centerHorizontal="true" 
     android:text="@string/SeekValueView" 
     android:id="@+id/SeekTextView" /> 

    <TextView 
     android:text="@string/pass_desc" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="@dimen/pass_desc_size" 
     android:id="@+id/passdesc" 
     android:textAlignment="center" 
     android:layout_marginTop="122dp" 
     android:layout_below="@+id/password" 
     android:layout_centerHorizontal="true" /> 

    <TextView 
     android:text="@string/password" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/password" 
     android:textSize="@dimen/password" 
     android:layout_marginTop="86dp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

    <Button 
     android:text="@string/NextPageText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/button" 
     android:id="@+id/button2" 
     android:layout_alignLeft="@+id/button" 
     android:layout_alignStart="@+id/button" 
     android:layout_alignRight="@+id/button" 
     android:layout_alignEnd="@+id/button" 
     android:onClick="goToSavedPassActivity" 
     android:textSize="12sp" /> 

</RelativeLayout> 

主要活動的Java:

public class MainActivity extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final TextView mPassword; 
    Button mGenPassButton;  //Defining Variables 
    final TextView mSeekBarValue; 
    Button mSavedPassActivity; 

    mPassword = (TextView) findViewById(R.id.password); 
    mGenPassButton = (Button) findViewById(R.id.button);  //Settings values and locations 
    mSeekBarValue = (TextView) findViewById(R.id.SeekTextView); 
    SeekBar seek=(SeekBar) findViewById(R.id.seekBar); 
    mSavedPassActivity = (Button) findViewById(R.id.button2); 

    seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { //Seekbar Actions 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { //When user moves it 
      // TODO Auto-generated method stub 
      SeekBarValue.seekval = progress; 
      mSeekBarValue.setText(String.valueOf(progress)); 

     } 
    }); 

    mSavedPassActivity.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, SavedPassActivity.class)); 
     } 
    }); 

    mGenPassButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      char[] chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".toCharArray(); 
      final StringBuilder sb = new StringBuilder(); 
      Random random = new Random(); 
      for (int i = 0; i < SeekBarValue.seekval; i++) { 
       char c = chars[random.nextInt(chars.length)]; 
       sb.append(c); 
      } 

      final String output = sb.toString(); 
      mPassword.setText(output); 
      SavedPassArray.SavedPasswords.add(output); 
     } 
    }); 

    } 
} 

SeekBarValue的Java:

public class SeekBarValue { 
public static int seekval; 
} 

SavedPassedArray的Java:

public class SeekBarValue { 
public static int seekval; 
} 

ViewPasswordActivity ScreenShot

密碼查看活動XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_saved_pass" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.jrfapplications.passgen.SavedPassActivity"> 

    <TextView 
     android:text="@string/PassList" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/PasswordsList" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:textSize="18sp" 
     android:scrollbars="vertical" 
     android:textStyle="normal|bold" /> 
</RelativeLayout> 

密碼查看Java:

public class SavedPassActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_saved_pass); 

    final TextView mPasswordsLists; 

    mPasswordsLists = (TextView) findViewById(R.id.PasswordsList); 

    StringBuilder allpasswords = new StringBuilder(); 

    for (String s : SavedPasswords){ 
     if(allpasswords.length() > 0){ 
      allpasswords.append("\n"); 
     } 
     allpasswords.append(s);  } 

    mPasswordsLists.setText(allpasswords.toString()); 
    mPasswordsLists.setMovementMethod(new ScrollingMovementMethod()); 

    //for(int i=0; i < SavedPasswords.size(); i++){ 
    } 
} 
+0

你想要一個數據庫。 SharedPreferences中的列表不能很好地工作。 https://developer.android.com/training/basics/data-storage/databases.html –

回答

0

您可以將數據保存到SharedPreferences

//創建共享p參考

SharedPreferences.Editor prefsEditor = getSharedPreferences("User", MODE_PRIVATE).edit(); 
prefsEditor.putString("User", Name); 
prefsEditor.putString("Password", password); 
prefsEditor.commit(); 

這裏,Name是veriable包含用戶名,veriable password包含密碼存儲

讀取數據

SharedPreferences prefs = getSharedPreferences("User", MODE_PRIVATE); 
String Name = prefs.getString("Name", null); 
String password = prefs.getString("Password", null); 

空是很重要的,如果條目Name不要」 t存在,那麼它將返回null。如果你把「Guest」而不是null,那麼當Name不存在時它將返回「Guest」。

+1

這對於一個用戶和一個密碼來說是一個很好的解決方案,但我相信問題是關於保存多個問題。你可以改爲使用戶名密鑰和密碼的價值,我猜 –

+0

多數民衆贊成在!但是,在屏幕截圖中,沒有用於輸入名稱的選項。請爲每個用戶設置一個唯一的ID,例如。 user01,user02 ...並單擊查看密碼按鈕時顯示所有用戶名和密碼 –

+1

好的,用戶密鑰始終相同。儘管如此,存儲可能無限長字符串的列表並非如何使用SharedPreferences –

0

使用JSON,

創建JsonObeject這樣,

try { 
     JSONObject user = new JSONObject(); 
     user.put("Id","Id of the user"); 
     user.put("Name","name of the user"); 
     user.put("Password","password for the user"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

然後將每個用戶添加到jsonArray

try { 

     JSONObject object = new JSONObject(); 
     object.put("Id","Id of the user"); 
     object.put("Name","name of the user"); 
     object.put("Password","password for the user"); 

     JSONArray array = new JSONArray(); 
     array.put(object); 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

您可以保存在SharedPreferences

數組//創建共享首選項

SharedPreferences.Editor prefsEditor = getSharedPreferences("User", MODE_PRIVATE).edit(); 
prefsEditor.putString("Users", array.toString()); 
prefsEditor.commit(); 

要讀取陣列

SharedPreferences prefs = getSharedPreferences("User", MODE_PRIVATE); 
String arrayString = prefs.getString("Users", null); 

的字符串轉換爲jsonArray

JSONArray array = new JSONArray(arrayString); 

在這裏你可以顯示ID,名稱和密碼,所有用戶都喜歡這個

try { 

    for (int i = 0; i < array.length(); i++) { 
     JSONObject user = array.getJSONObject(i); 

     textViewId.setText(user.getString("Id")); 
     textViewName.setText(user.getString("Name")); 
     textViewPassword.setText(user.getString("Password")); 
    } 

} catch (JSONException e) { 
    e.printStackTrace(); 
} 

你可以用這樣的ID搜索用戶,

try { 

    for (int i = 0; i < array.length(); i++) { 
     JSONObject user = array.getJSONObject(i); 

     if (user.getString("Id").equals("Required Id")) { 

      textViewId.setText(user.getString("Id")); 
      textViewName.setText(user.getString("Name")); 
      textViewPassword.setText(user.getString("Password")); 
      break; 
     } 
    } 

} catch (JSONException e) { 
    e.printStackTrace(); 
} 

你可以用這樣的名稱搜索用戶,

try { 

    for (int i = 0; i < array.length(); i++) { 
     JSONObject user = array.getJSONObject(i); 

     if (user.getString("Name").equals("Required Name")) { 

      textViewId.setText(user.getString("Id")); 
      textViewName.setText(user.getString("Name")); 
      textViewPassword.setText(user.getString("Password")); 
      break; 
     } 
    } 

} catch (JSONException e) { 
    e.printStackTrace(); 
} 

希望它可以幫助!

+0

謝謝!我沒有使用這種方法,但我仍然感謝你的信息:) –

相關問題