1

私はSharedPrefrencesを使用して試してみましたが、internal storageに保存しましたが、結果が得られません。私が達成した唯一の結果はクラッシュです。アプリケーションが終了したときにListViewを保存する方法

ユーザーオプションに基づいてカスタムパスワードを生成するアプリがあり、ユーザーがボタンをクリックしてパスワードを保存すると、そのパスワードがArraylistに入力されます。しかし、アプリケーションが終了すると、すべてのデータが失われます。

ポピュレートされたArrayListまたはListViewを保存するにはどうすればいいですか?ユーザーがビューのパスワードをクリックすると、以前に保存されたパスワードを見ることができますか?

*主な活動JAVA *

package com.jrfapplications.passgen; 

import android.content.Context; 
import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.HashSet; 
import java.util.Random; 
import java.util.Set; 

import static com.jrfapplications.passgen.SettingsPage.CustPass; 
import static com.jrfapplications.passgen.SettingsPage.FBPass; 
import static com.jrfapplications.passgen.SettingsPage.custword; 
import static com.jrfapplications.passgen.SettingsPage.custwordend; 
import static com.jrfapplications.passgen.SettingsPage.isEndWordChecked; 
import static com.jrfapplications.passgen.SettingsPage.isHighCaseChecked; 
import static com.jrfapplications.passgen.SettingsPage.isNumbChecked; 
import static com.jrfapplications.passgen.SettingsPage.isSpecChecked; 
import static com.jrfapplications.passgen.SettingsPage.isStartCustWordChecked; 
import static com.jrfapplications.passgen.SettingsPage.passLength; 

public class MainActivity extends AppCompatActivity implements Serializable { 

    //Buttons 
    Button btnGoToSet; 
    Button btnGenPass; 
    Button btnViewPass; 
    Button btnSavePass; 

    //TextView 
    TextView passView; 

    //Saved Pass Array 
    static ArrayList<String> SavedCustomPasswords = new ArrayList<>(); 
    static ArrayList<String> SavedFacebookPasswords = new ArrayList<>(); 

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

     //Find Buttons 
     btnGoToSet = (Button) findViewById(R.id.settingsbtn); 
     btnGenPass = (Button) findViewById(R.id.genpass); 
     btnViewPass = (Button) findViewById(R.id.viewpassbtn); 
     btnSavePass = (Button) findViewById(R.id.SavePassBtn); 

     //Find TextView 
     passView = (TextView) findViewById(R.id.pwEditTxt); 

     //Button Functions 
     btnGoToSet.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       startActivity(new Intent(MainActivity.this, SettingsPage.class)); 
      } 
     }); 

     btnGenPass.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       generatePassword(generateCharSet()); 
      } 
     }); 

     btnSavePass.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (CustPass == 1){ 
        if (SavedCustomPasswords.contains(passView.getText().toString())){ 
         Toast.makeText(getApplicationContext(), "Password Already Saved", Toast.LENGTH_SHORT).show(); 

        }else{ 
         SavedCustomPasswords.add(passView.getText().toString()); 
         Toast.makeText(getApplicationContext(), "Password Saved", Toast.LENGTH_SHORT).show(); 

        } 
       } 
       if (FBPass == 1){ 
        if (SavedFacebookPasswords.contains(passView.getText().toString())){ 
         Toast.makeText(getApplicationContext(), "Password Already Saved", Toast.LENGTH_SHORT).show(); 
        }else{ 
         SavedFacebookPasswords.add(passView.getText().toString()); 
         Toast.makeText(getApplicationContext(), "Password Saved", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 
     }); 

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

    public char[] generateCharSet() { 
     String numbers = ""; 
     String special = "!£$%^&*()"; 
     String alphabetsLower = "abcdefghijklmnopqrstuvwxyz"; 
     String alphabetsUpper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

     // Add lower alphabets by default 
     StringBuilder finalCharset = new StringBuilder(alphabetsLower); 

     // Add special chars if option is selected 
     if (isSpecChecked == 1) { 
      finalCharset.append(special); 
     } 

     // Add upper case chars if option is selected 
     if (isHighCaseChecked == 1) { 
      finalCharset.append(alphabetsUpper); 
     } 

     // Add numbers if option is selected 
     if (isNumbChecked == 1) { 
      finalCharset.append(numbers); 
     } 

     // build the final character set 
     return finalCharset.toString().toCharArray(); 
    } 

    public void generatePassword(char[] charset) { 
     final StringBuilder sb = new StringBuilder(); 
     Random random = new Random(); 
     for (int i = 0; i < passLength; i++) { 
      char c = charset[random.nextInt(charset.length)]; 
      sb.append(c); 
     } 

     if (isStartCustWordChecked == 1 && isEndWordChecked == 1){ 
      final String output = custword + sb.toString() + custwordend; 
      passView.setText(output); 
     }else if (isStartCustWordChecked == 1){ 
      final String output = custword + sb.toString(); 
      passView.setText(output); 
     }else if (isEndWordChecked == 1){ 
      final String output = sb.toString() + custwordend; 
      passView.setText(output); 
     }else 
     { 
      final String output = sb.toString(); 
      passView.setText(output); 
     } 
    } 
} 

* VIEW PASS JAVA *

package com.jrfapplications.passgen; 

import android.content.Context; 
import android.content.SharedPreferences; 
import android.preference.PreferenceManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 

public class view_pass extends AppCompatActivity { 

    private ListView mListView1, mListView2; 

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

     mListView1 = (ListView)findViewById(R.id.listView1); 
     mListView2 = (ListView)findViewById(R.id.listView2); 

     mListView1.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, MainActivity.SavedCustomPasswords)); 
     mListView2.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, MainActivity.SavedFacebookPasswords)); 

     ListUtils.setDynamicHeight(mListView1); 
     ListUtils.setDynamicHeight(mListView2); 
    } 


    public static class ListUtils { 
     public static void setDynamicHeight(ListView mListView) { 
      ListAdapter mListAdapter = mListView.getAdapter(); 
      if (mListAdapter == null) { 
       // when adapter is null 
       return; 
      } 
      int height = 0; 
      int desiredWidth = View.MeasureSpec.makeMeasureSpec(mListView.getWidth(), View.MeasureSpec.UNSPECIFIED); 
      for (int i = 0; i < mListAdapter.getCount(); i++) { 
       View listItem = mListAdapter.getView(i, null, mListView); 
       listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED); 
       height += listItem.getMeasuredHeight(); 
      } 
      ViewGroup.LayoutParams params = mListView.getLayoutParams(); 
      params.height = height + (mListView.getDividerHeight() * (mListAdapter.getCount() - 1)); 
      mListView.setLayoutParams(params); 
      mListView.requestLayout(); 
     } 

    } 
} 
+0

https://www.tutorialspoint.com/android/android_sqlite_database.htm このリンクは、 –

+1

あなたがfacebookをハックしようとしていますか? lol sql liteデータベースを使用するか、firebaseストレージを使用できるクラウドとの同期が必要な場合。 https://firebase.google.com/ – AndroidRuntimeException

+1

あなたのコードをあまりにも多く投稿しています。そのほとんどは無関係です。「最小、完全、および検証可能なサンプルの作成方法」については、http://stackoverflow.com/help/mcveを参照してください。 –

答えて

0

私はDirection Guysに感謝の気持ちでArrayListsを保存するために共有設定を使用しました! 私の答えのためにこれを使用する:

Android: keep values in list after app shutdown

static ArrayList<String> SavedCustomPasswords = new ArrayList<>(); 

SavedCustomPasswords = getArray(); 
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, SavedCustomPasswords); 

adapter.notifyDataSetChanged(); 

public boolean saveArray() { 
    SharedPreferences sp = this.getSharedPreferences(SHARED_PREFS_NAME, Activity.MODE_PRIVATE); 
    SharedPreferences.Editor mEdit1 = sp.edit(); 
    Set<String> set = new HashSet<String>(); 
    set.addAll(SavedCustomPasswords); 
    mEdit1.putStringSet("list", set); 
    return mEdit1.commit(); 
} 

public void onStop() { 
    saveArray(); 
    super.onStop(); 
} 

public ArrayList<String> getArray() { 
    SharedPreferences sp = this.getSharedPreferences(SHARED_PREFS_NAME, Activity.MODE_PRIVATE); 

    //NOTE: if shared preference is null, the method return empty Hashset and not null 
    Set<String> set = sp.getStringSet("list", new HashSet<String>()); 

    return new ArrayList<String>(set); 
} 
0

私はFirebaseのように非常にシンプルな

0

共有好みやGsonを、SQL、またはクラウドベースのシステムをお勧めします、あなたはそれがローカルに保存されたい場合は、DBMSを使用してみてください。

関連する問題