2016-12-10 1 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は「passwordは、パスワードが

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

ヌルが重要なデータを読み取るには

を保存する場合は、エントリNameドンが含まれていveriable veriableは、ユーザ名が含まれています存在しない場合はnullを返します。ヌルの代わりに「Guest」を指定すると、Nameが存在しない場合は「Guest」が返されます。

+1

これは、1人のユーザーと1人のパスワードでうまく解決できるソリューションですが、複数のパスワードを保存するかどうか尋ねられました。代わりに、ユーザー名をキーとパスワードに値を設定すると、 –

+0

Thats gud !!しかし、スクリーンショットでは、名前を入力するオプションはありません。それぞれのユーザーに固有のIDを作成するには、たとえば、 user01、user02 ...そして、パスワードを表示ボタンをクリックすると、すべてのユーザー名をパスワードで表示します。 –

+1

OK、ユーザーキーは常に同じです。それでも、無限の可能性のある文字列のリストを格納する方法は、SharedPreferencesの使用方法ではありません。 –

0

使用JSON、

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

//で配列を保存することができ、このようJsonObejectを作成共有設定を作成する

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

jsonArray

JSONArray array = new JSONArray(arrayString); 

に文字列を変換するために、アレイ

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

を読むためにここにあなたがこの

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、名前とパスワードですべてのユーザーを表示することができます

あなたはこのような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

ありがとう!私はこの方法を使用していないが、私はまだ情報のためにあなたに感謝:) –

関連する問題