2016-12-10 2 views
0

Я действительно новичок в этом и добился устойчивого прогресса в отношении создания приложения. Я хочу создать приложение, которое позволяет пользователю генерировать случайный пароль с помощью ползунка для установки длины и затем генерировать. Как только это будет сделано, я хочу, чтобы пользователь мог сохранять свои сгенерированные пароли. До сих пор я добился всего, кроме сохранения паролей, которые будут восстановлены позже после закрытия приложения. Я прочитал много сообщений, и я просто не могу понять, как сохранить данные приложения после закрытия приложения, погодных условий это файл или SharedPrefrences. Некоторые разъяснения и помощь будут очень оценены.Как сохранить TextView/Array в Android и получить его позже?

Что я хочу достичь

Я хотел бы кнопку, пользователь нажимает и пароли они генерировали (которые хранятся в этом массиве) сохраняются в приложении тогда, когда они закрывают его и пришел назад они могут получить сохраненные пароли.

Спасибо всем, в передовых, я прошу у меня прощения относительно кода его, вероятно, очень грязный, но я учусь: D

Благодаря

-Джек

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

// Создание общей п ссылка

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.Если вы помещаете «Гость» вместо null, тогда он будет возвращать «Гость», когда Name не существует.

+1

Это прекрасное решение для одного пользователя и одного пароля, но я считаю, что вопрос задал вопрос о сохранении нескольких. Вместо этого вы можете сделать имя пользователя ключом и паролем значение, я думаю, –

+0

Thats gud !! Но на скриншоте нет опции для ввода имени. Сделайте уникальный идентификатор для каждого пользователя, например. user01, user02 ... И покажите все имена пользователей с паролем при нажатии кнопки VIEW PASSWORDS. –

+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); 

здесь вы можете отобразить все пользователи с идентификатором, именем и паролем, как это

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(); 
} 

вы можете искать пользователя с таким именем,

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

Спасибо! Я не использовал этот метод, но я все равно благодарю вас за информацию :) –