Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在活动中保存ArrayList_Java_Android_Kotlin_Arraylist - Fatal编程技术网

Java 在活动中保存ArrayList

Java 在活动中保存ArrayList,java,android,kotlin,arraylist,Java,Android,Kotlin,Arraylist,我已经试了几天,想找到一种方法来做到这一点 我正在构建一个食品订购应用程序,我有3个活动,一个用于订购,一个用于显示订单确认,一个用于显示所有订单。除了我不能显示订单外,其他一切都正常,只有最后一个订单 我尝试了SharedReferences,尝试了各种方式的意图捆绑包,但都没有找到答案 我认为问题在于每次我回到活动时,包含订单的ArrayList变量都会重新初始化,并且只显示最新的订单 我想能够显示所有的订单,已被放置,而应用程序上 有什么建议吗 以下是“我的订单”活动的代码,您可以查看我尝

我已经试了几天,想找到一种方法来做到这一点

我正在构建一个食品订购应用程序,我有3个活动,一个用于订购,一个用于显示订单确认,一个用于显示所有订单。除了我不能显示订单外,其他一切都正常,只有最后一个订单

我尝试了
SharedReferences
,尝试了各种方式的意图捆绑包,但都没有找到答案

我认为问题在于每次我回到活动时,包含订单的
ArrayList
变量都会重新初始化,并且只显示最新的订单

我想能够显示所有的订单,已被放置,而应用程序上

有什么建议吗

以下是“我的订单”活动的代码,您可以查看我尝试过的内容:

public class AllaBestallningar extends AppCompatActivity {

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

private static final String TEXT_CONTENTS = "AllaOrders";

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

        SharedPreferences sp = getApplicationContext().getSharedPreferences("orders", Context.MODE_PRIVATE);
        String order = sp.getString("order", "ingen text");
        minaOrders.add(order);
        minaOrders.add("Estelle");
        minaOrders.add("Nicklas");

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

        ListView ordersList = (ListView) findViewById(R.id.minList);

        ordersList.setAdapter(adapter);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.app_meny, menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.laggBesMeny:
                Intent i = new Intent(AllaBestallningar.this, MainActivity.class);
                startActivity(i);
                return true;
            case R.id.minaBesMeny:
                Toast.makeText(this, "Du är redan på beställningsidan", Toast.LENGTH_SHORT).show();
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        outState.putStringArrayList(TEXT_CONTENTS, minaOrders);
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        minaOrders = savedInstanceState.getStringArrayList(TEXT_CONTENTS);
    }
}

订单应使用存储库模式存储。 存储库是具有单个实例的对象,可以从应用程序中的任何屏幕访问该实例,并且其生命周期不与任何活动绑定

这只是一个模式,没有要实现的库或类,您必须通过Google“repository模式”来学习如何实现它


存储库将具有检索和存储数据的方法。在内部,它可以使用数据库在会话之间持久化数据,如果不需要持久化数据,也可以将其存储在内存中的变量中。如果需要获取数据并将其存储在数据库中,它还可以进行网络调用。

订单应使用存储库模式存储。 存储库是具有单个实例的对象,可以从应用程序中的任何屏幕访问该实例,并且其生命周期不与任何活动绑定

这只是一个模式,没有要实现的库或类,您必须通过Google“repository模式”来学习如何实现它


存储库将具有检索和存储数据的方法。在内部,它可以使用数据库在会话之间持久化数据,如果不需要持久化数据,也可以将其存储在内存中的变量中。如果您需要获取数据,然后将其存储在数据库中等,它还可以进行网络调用。

我看不到您在何处写入共享首选项。您好,共享首选项在Main活动中,这是显示所有订单的活动。我看不到您在何处写入共享首选项。您好,共享首选项位于MainActivity中,这是显示所有订单的活动。
package learnprogramming.academy.cafestudent;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

import java.nio.channels.InterruptedByTimeoutException;
import java.util.ArrayList;
import java.util.zip.Inflater;

public class MainActivity extends AppCompatActivity {

    Button buttonPizza, buttonSallad, buttonKyckling, buttonRak;
    String bestallning = "", option= " ";
    Double pris = 0.0;
    RadioGroup radioGroup;
    RadioButton radioButton;
    SharedPreferences sp;


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

        buttonPizza = (Button) findViewById(R.id.buttonPizza);
        buttonSallad = (Button) findViewById(R.id.buttonSallad);
        buttonKyckling = (Button) findViewById(R.id.buttonKycklingmacka);
        buttonRak = (Button) findViewById(R.id.buttonRakmacka);

        OnClickListener onOrder = new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v == buttonPizza) {
                    bestallning = bestallning + "Pizza 25kr \n";
                    pris += 25.00;
                    Toast.makeText(MainActivity.this, "Tillagd i beställningen", Toast.LENGTH_SHORT).show();
                } else if (v == buttonSallad) {
                    bestallning = bestallning + "Sallad 45kr \n";
                    pris += 45.00;
                    Toast.makeText(MainActivity.this, "Tillagd i beställningen", Toast.LENGTH_SHORT).show();
                } else if (v == buttonKyckling) {
                    bestallning = bestallning + "Kycklingmacka 40kr \n";
                    pris += 40.00;
                    Toast.makeText(MainActivity.this, "Tillagd i beställningen", Toast.LENGTH_SHORT).show();
                } else if (v == buttonRak) {
                    bestallning = bestallning + "Räkmacka 40kr \n";
                    pris += 40.00;
                    Toast.makeText(MainActivity.this, "Tillagd i beställningen", Toast.LENGTH_SHORT).show();
                }
                option = "\n " + bestallning + pris.toString()+ "kr \n ---------";
            }
        };

        option = "\n " + bestallning + pris.toString()+ "kr \n ---------";

        sp = getSharedPreferences("orders", Context.MODE_PRIVATE);

        buttonPizza.setOnClickListener(onOrder);
        buttonSallad.setOnClickListener(onOrder);
        buttonKyckling.setOnClickListener(onOrder);
        buttonRak.setOnClickListener(onOrder);


        Button bestalla;
        bestalla = (Button) findViewById(R.id.buttonBestall);

        View.OnClickListener onPlaceOrder = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(bestallning == ""){
                    Toast.makeText(MainActivity.this, "Du har inte gjort några val", Toast.LENGTH_SHORT).show();
                } else {
                    {
                        SharedPreferences.Editor editor = sp.edit();
                        editor.putString("order", option);
                        editor.commit();

                        Intent place = new Intent(MainActivity.this, Bestallningar.class);
                        Bundle bestall = new Bundle();
                        bestall.putString("beställning", bestallning);
                        bestall.putDouble("pris", pris);
                        place.putExtras(bestall);
                        startActivity(place);

                        bestallning = "";
                        pris = 0.0;
                    }
                }

            }
        };

        bestalla.setOnClickListener(onPlaceOrder);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.app_meny, menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.laggBesMeny:
                Toast.makeText(this, "Du är redan på beställningsidan", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.minaBesMeny:
                Intent i = new Intent(MainActivity.this, AllaBestallningar.class);
                startActivity(i);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void checkButton(View v) {
        int radioId = radioGroup.getCheckedRadioButtonId();
        radioButton = findViewById(radioId);
        Toast.makeText(this, "Du har valt leverans kl: " + radioButton.getText(), Toast.LENGTH_SHORT).show();
    }

}