gpt4 book ai didi

java - 在新 Intent 上填充 ArrayList

转载 作者:行者123 更新时间:2023-12-02 13:11:20 26 4
gpt4 key购买 nike

当我首先启动我的应用程序时,main Activity 被调用。我在此 Activity 中有一个 ArrayList,它通过 Intent 进行填充。问题是,如果我想启动它,我的应用程序就会崩溃(我猜我得到了一个空指针异常,因为在该过程的这一点上没有 Intent )。但是,从此 Activity 中您可以调用另一个 Activity,您可以在其中输入一些数据,并且该数据通过提到的 Intent 发送到 main Activity 以填充 数组列表。我尝试将其填充到 on new 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 方法:(注意:我不会尝试在此类中两次获取 Intent(在新的 Intent 方法和这个方法上)。我总是将其中一个注释掉)

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 + " $");

}

最佳答案

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

在使用 onCreate() 的版本中,最有可能导致 NPE 的原因是 getExtras() 返回 null,因为 Intent 中没有“extras”包。请注意,您已经将此 Bundle 作为参数,因此无需调用 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 extra 中而不是将其作为字符串来简化此咖啡。然后你可以直接获取 float ,而不是从字符串中解析它。另外,您可以使 Transaction 实现 Parcelable。

关于java - 在新 Intent 上填充 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43939599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com