2017-12-20 16 views
0

私は配列に値を設定し、それをリストビューに表示する基本的なアプリケーションを持っています。私は、アプリケーションを閉じて、それを再オープンlistviewは空です、あなたはどこに配列を保存しますか?私は共有の設定で多くの投稿を参照してくださいが、そこに配列を格納するための回避策と思われる、また、配列ストレージ上の任意のアンドロイドのドキュメントを見つけることができません?誰でも私に正しい方向に向けることができますか?要求されたようアレイの保存方法は?

私のコード....

public class ListView_Activity extends AppCompatActivity { 

ArrayList<String>mylistarray = new ArrayList<>(); 

String tempdescr; 
String tempname; 
static final int ADD_NEW_ITEM = 1; 



    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list_view_); 
     /*add the main toolbar and make some changes to format*/ 
     Toolbar mToolbar = findViewById(R.id.my_toolbar); 
     setSupportActionBar(mToolbar); 
     getSupportActionBar().setDisplayShowTitleEnabled(false); 
     mToolbar.setTitle(R.string.toolbartitle); 
     mToolbar.setSubtitle(R.string.toolbarsubtitle); 
     mToolbar.setTitleTextColor(getResources().getColor(R.color.colorWhite)); 
     mToolbar.setSubtitleTextColor(getResources().getColor(R.color.colorAccent)); 



     final ArrayAdapter<String> myadapter = new ArrayAdapter<String>(ListView_Activity.this, R.layout.simple_list_item_1, R.id.row_item_text_view, mylistarray); 

     /*create array adapter and set to listview*/ 

     final ListView mylistview = findViewById(R.id.mylistview); 
     mylistview.setAdapter(myadapter); 
     mylistarray.add("Test"); 
     myadapter.notifyDataSetChanged(); 

     final FloatingActionButton additembutton = findViewById(R.id.floatingActionButton); 
     additembutton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent additem = new Intent(ListView_Activity.this, Create_Item_Activity.class); 
       startActivityForResult(additem, 1); 
      } 
     }); 




    } 

    /*load options menu to toolbar*/ 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main_toolbar, menu); 
     return true; 
    } 

    /*handle options menu click events*/ 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.settings: 
       //intent here to load settings activity// 
       return true; 
      case R.id.Feedback: 
       Intent Feedbackemail = new Intent(Intent.ACTION_SEND); 
       Feedbackemail.setType("text/email"); 
       Feedbackemail.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"}); 
       Feedbackemail.putExtra(Intent.EXTRA_SUBJECT, "Feedback"); 
       Feedbackemail.putExtra(Intent.EXTRA_TEXT,"Dear..."+""); 
       startActivity(Intent.createChooser(Feedbackemail,"Send Feedback")); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 



    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
     if (requestCode == ADD_NEW_ITEM){ 
      if (resultCode == Activity.RESULT_OK) { 
       tempdescr = data.getStringExtra("tempdescr"); 
       tempname = data.getStringExtra("tempname"); 
       mylistarray.add(tempdescr); 
       mylistarray.add(tempname); 



      } 
      if (resultCode == Activity.RESULT_CANCELED) { 
       Toast replacewithcode = Toast.makeText(ListView_Activity.this, "replace with code", Toast.LENGTH_SHORT); 
       replacewithcode.show(); 
      } 
     } 
    } 




} 
+0

あなたの配列はどこにありますか? – MeHdi

+0

配列はmainactivityで作成され、標準インテントを介して移入され、必要に応じてコードを投稿しますか? – Adam

+0

しかし、配列が主なアクティビティで作成されている場合は、通常、アプリケーションを閉じて再度開くと、再度作成する必要があります。 – FreshD

答えて

1

あなたの配列を格納するために行くことができるいくつかのオプションがあります。

オプション1.

共有優先設定は、そのシンプルでわかりやすいものです。あなたのアレイが大きくない限り、これはおそらく最良の選択肢でしょう。ここに共有プリファレンスガイドへのリンクがあります。これにより

https://developer.android.com/training/data-storage/shared-preferences.html

あなたはおそらく文字列にあなたの配列を変換した文字列を格納するGSONのようなものを使用したいと思います。ローカルmysqliteデータベース内

オプション2

店が、これは理解し、もう少し複雑ですが、あなたの配列のために大量のデータを保持することができます。ここにアンドロイドのsqliteガイドへのリンクがあります。 3.

https://developer.android.com/training/data-storage/sqlite.html

オプションは、この1つはセットアップに最長がかかるだろうが、アプリがデータをフェッチできるようになる、データベース/サーバーを使用してください。このオプションを使用すると、データベースへのインターネット接続が必要になります。

mysqliteデータベースを設定することをお勧めします。あなたがそれを処理できると思うのであれば、初心者が設定を共有するためのコードを少なくするために共有環境設定に配列を格納する傾向があります。

+0

ジェイコブあなたはトップマンです。これは私が私を得るために必要だったものです、読んで始めます! – Adam

+0

Java IO APIを使用してファイルシステムに格納することもできます。しかし、ヤコブは、文字列のリストを格納する最も適切な方法は、それらをデータベースに格納することだと私は同意します。 GoogleはRoom https://developer.android.com/training/data-storage/room/index.htmlというデータベースを扱うための新しいAPIをリリースしました –

関連する問題