Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.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_Android Intent_Arraylist - Fatal编程技术网

Java 填写ArrayList上的新意图

Java 填写ArrayList上的新意图,java,android,android-intent,arraylist,Java,Android,Android Intent,Arraylist,当我第一次启动应用程序时,会调用主活动。我在这个活动中有一个ArrayList,它通过一个Intent填充。问题是我的应用程序崩溃了,如果我想启动它,我会得到一个空指针异常,我想这是因为在程序的这一点上没有意图。但是,通过此活动,您可以调用另一个活动,在该活动中,您可以输入一些数据,并且这些数据将通过上述意图发送到主活动以填充ArrayList。我尝试在一个新的Intent方法中填充它,这样它就不会崩溃,但我的ArrayList没有发生任何变化 有人知道我怎么解决这个问题吗?多谢各位 以下是我的

当我第一次启动应用程序时,会调用主活动。我在这个活动中有一个ArrayList,它通过一个Intent填充。问题是我的应用程序崩溃了,如果我想启动它,我会得到一个空指针异常,我想这是因为在程序的这一点上没有意图。但是,通过此活动,您可以调用另一个活动,在该活动中,您可以输入一些数据,并且这些数据将通过上述意图发送到主活动以填充ArrayList。我尝试在一个新的Intent方法中填充它,这样它就不会崩溃,但我的ArrayList没有发生任何变化

有人知道我怎么解决这个问题吗?多谢各位

以下是我的方法:

protected void onNewIntent(Intent depositIntent) {
    super.onNewIntent(depositIntent);
    if(depositIntent.getStringExtra("CHECK").equals("yes")){

        DepositInputValue = getIntent().getExtras().getString("DEPOSITINPUTVALUE");
        DepositInputDate = getIntent().getExtras().getString("DEPOSITINPUTDATE");
        DepositInputNote = getIntent().getExtras().getString("DEPOSITINPUTNOTE");

        float newValue = Float.parseFloat(DepositInputValue);
        int newDate = Integer.parseInt(DepositInputDate);

        myTransactions.add(new Transaction(newValue, newDate, DepositInputNote));
    }
}
这是我的onCreate方法:注意:在这个类中,我不会在newintent方法和这个方法上尝试两次获取意图。我总是评论其中一个

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_assets_overview);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fabplus = (FloatingActionButton) findViewById(R.id.fabAdd);
    fabplus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(AssetsOverview.this, AddMoneyTransaction.class));
        }
    });

    FloatingActionButton fabminus = (FloatingActionButton) findViewById(R.id.fabRemove);
    fabminus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(AssetsOverview.this, RemoveMoneyTransaction.class));
        }
    });

    FloatingActionButton fabhint = (FloatingActionButton) findViewById(R.id.fabHint);
    fabhint.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(AssetsOverview.this, HintMoneyTransaction.class));
        }
    });

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    //transaction list

    //populateTransactionList();
    populateListView();


    DepositInputValue = getIntent().getExtras().getString("DEPOSITINPUTVALUE");
    DepositInputDate = getIntent().getExtras().getString("DEPOSITINPUTDATE");
    DepositInputNote = getIntent().getExtras().getString("DEPOSITINPUTNOTE");

    float newValue = Float.parseFloat(DepositInputValue);
    int newDate = Integer.parseInt(DepositInputDate);

    myTransactions.add(new Transaction(newValue, newDate, DepositInputNote));

    //calculate and set current (actual) balance

    TextView balance_view = (TextView) findViewById(R.id.balance_view);
    balance_view.setText(newValue + newDate + DepositInputNote + " $");

}

您似乎正在创建一个会计应用程序。您应该使用数据库来永久存储数据。每个活动都可以直接从数据库中读取,您无需费心在活动之间发送数据列表

在使用onCreate的版本中,NPE最有可能的原因是getExtras返回null,因为在intent中没有extras包。请注意,您已经将此捆绑包作为参数,因此无需调用getIntent.getExtras。而是使用savedInstanceState。在使用它之前,还必须检查它是否为空:

if(savedInstanceState != null) {
    DepositInputValue = getIntent().getExtras().getString("DEPOSITINPUTVALUE");
    DepositInputDate = getIntent().getExtras().getString("DEPOSITINPUTDATE");
    DepositInputNote = getIntent().getExtras().getString("DEPOSITINPUTNOTE");
    float newValue = Float.parseFloat(DepositInputValue);
    int newDate = Integer.parseInt(DepositInputDate); myTransactions.add(new Transaction(newValue, newDate, DepositInputNote));

    //calculate and set current (actual) balance TextView
    balance_view = (TextView) findViewById(R.id.balance_view);
    balance_view.setText(newValue + newDate + DepositInputNote + " $"); 
}

请注意,您可以通过将float直接放在Intents extras中而不是将其作为字符串来简化此咖啡。然后,您可以直接获取浮点值,而不是从字符串解析它。此外,您还可以使事务实现可打包。

您可以共享log cat所说的内容吗?哪一行导致错误?另外,如果您使事务可打包或可序列化,则可以将这些对象直接添加到意图中,而不是其内容中。此外,使用Intent参数而不是调用getIntent@Code-学徒myTransactions是myTransactions.addnew TransactionnewValue、newDate、DepositInputNote行中的my ArrayList;我想把它添加到数组列表中。如果我将getIntent移动到oncreate方法,就会出现空指针异常。谢谢,我没有想到这一点。我稍后会试试这个