向sharedPreferences

时间:2019-06-05 15:34:39

标签: android

如何确保在这种情况下创建新票证时,然后在第二个活动中进行可视化,然后添加新票证,然后由我使用先前创建的票证进行书写,所以我希望不要创建所有新票证被覆盖但被添加

公共类Aggiungi扩展了AppCompatActivity {

 public EditText ed_ticket,ed_redattore,ed_targa,ed_dataA,ed_materiale,ed_dataC;
 Button salvataggio;
 public SharedPreferences shared;


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

    ActionBar actionBar = getSupportActionBar();
    Objects.requireNonNull(getSupportActionBar()).setTitle("Aggiungi");

    ed_ticket = findViewById(R.id.editex_ticket);
    ed_redattore = findViewById(R.id.editex_redattore);
    ed_targa = findViewById(R.id.editex_targa);
    ed_dataA = findViewById(R.id.editex_dataA);
    ed_materiale = findViewById(R.id.editex_materiale);
    ed_dataC = findViewById(R.id.editex_dataC);

    salvataggio = findViewById(R.id.btn_save);

    salvataggio.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            savelista();
        }
    });


}
public void savelista() {

    shared = getSharedPreferences("newListTicket", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = shared.edit();

    editor.putString("ticket",ed_ticket.getText().toString().trim());
    editor.putString("redattore",ed_redattore.getText().toString().trim());
    editor.putString("targa",ed_targa.getText().toString().trim());
    editor.putString("dataA",ed_dataA.getText().toString().trim());
    editor.putString("materiale",ed_materiale.getText().toString().trim());
    editor.putString("dataC",ed_dataC.getText().toString().trim());
    editor.commit();

}

}

公共类Visualizza扩展了AppCompatActivity {

private MaterialSearchView mMaterialSearch;
private SharedPreferences shared;

private ArrayList<Ticket> mExampleList;

RecyclerView mRecyclearView;
RecyclerView.Adapter mAdapter;
RecyclerView.LayoutManager mLayoutManager;

Toolbar mToolbar;

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

    /*//todo modalita FullScreen
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);*/
    mToolbar = findViewById(R.id.toolbar);
    setSupportActionBar(mToolbar);
    mMaterialSearch = findViewById(R.id.searchview);

    createExampleList();
    BuildRecyclearView();
    createNewTicket();

}

//TODO nuova scheda Ticket
public void createNewTicket() {

     shared = getPreferences(MODE_PRIVATE);

        //int ticket = Integer.parseInt(incomingMessages.getString(""));
        String ticket = shared.getString("ticket","");
        String redattore = shared.getString("redattore","");
        String targa = shared.getString("targa","");
        String dataA = shared.getString("dataA","");
        String materiale = shared.getString("materiale","");
        String dataC = shared.getString("dataC","");

        //TODO creazione nuova scheda Ticket
        Ticket Ticket = new Ticket(ticket, redattore, targa, dataA, materiale, dataC);
        mExampleList.add(Ticket);
        mAdapter.notifyDataSetChanged();



}
//TODO Costruzione della RecyclerView
public void BuildRecyclearView() {
    //todo dichiarazione adapter e chiamiamo il suo costruttore passandogli i parametri necessari
    mRecyclearView = findViewById(R.id.miorecyclerView);
    mRecyclearView.setHasFixedSize(true);
    //todo assegnazione LinearLayoutManager alla RecyclearView
    mLayoutManager = new LinearLayoutManager(this);
    //todo set LinearLayoutManager
    mAdapter = new ExampleAdapter(mExampleList);
    mRecyclearView.setLayoutManager(mLayoutManager);
    //TODO COLLEGAMENTO ADAPTER ALLA TABLELYOUT
    mRecyclearView.setAdapter(mAdapter);

}
//TODO Esempio di ArrayList
public void createExampleList () {
    mExampleList = new ArrayList<>();
    mExampleList.add(new Ticket("123356", "ALESSANDRO", "EP562WS", "12052018", "Lampeggiante Guasto", "23/10/2018"));
    mExampleList.add(new Ticket("34567", "FRANCESCO", "EP762NS", "19052019", "Motore Guasto", "21/05/2019"));
    mExampleList.add(new Ticket("34353", "ALESSANDRO", "EP760WR", "25052017", "Freni Guasti", "10/12/2018"));
    mExampleList.add(new Ticket("23786","FRANCESCO","EG223KL","27082019","RUOTA SX","28/08/2019"));
}

//TODO Procedura ToolBar Menu
@Override
public boolean onCreateOptionsMenu (Menu menu){
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.my_menu, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search);
    MenuItem menuItem = menu.findItem(R.id.action_search);
    mMaterialSearch.setMenuItem(menuItem);

    // return true;
    return super.onCreateOptionsMenu(menu);
}

//TODO Procedura di selezione pulsante Menu
@Override
public boolean onOptionsItemSelected (MenuItem item){
    if (item.getItemId() == R.id.action_salva) {

        Toast.makeText(Visualizza.this, "Hai premuto il tasto Salva", Toast.LENGTH_SHORT).show();
    }
    return super.onOptionsItemSelected(item);
}

}

2 个答案:

答案 0 :(得分:0)

由于您对添加到key的所有项目使用相同的SharedPreferences,因此它们将被覆盖。您可以对要添加到SharedPreferences的每个项目使用不同的键,这样它们就不会相互覆盖。即ticket_1ticket_2等。但是恕我直言,最好使用SQLite保存此类数据,或者最好使用Room库保存数据。< / p>

答案 1 :(得分:0)

SharedPreference可以处理Set。您需要在书写时将ArrayList转换为Set,然后在阅读时将其从Set转换回ArrayList

使用该库Android SharedPreferences Turbo可以很容易地将ArrayList放入SharedPreferences中。它在内部使用答案开始时所说的集合。

第1步:创建一个TinyDb对象

TinyDb tinyDb = new TinyDb(context);

第2步:将列表放入SharedPreferences

tinyDb.putList("UniqueStringToIdentifyYourList", yourList);

第3步:获取列表

tinydb.getList("UniqueStringToIdentifyYourList");