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

Java 在arraylist中存储抽象类

Java 在arraylist中存储抽象类,java,android,inheritance,arraylist,abstract,Java,Android,Inheritance,Arraylist,Abstract,因此,我正在用java制作一个android应用程序,并有以下几个类 我的问题是,当我在应用程序中创建帐户时,让我们说new CheckingAccount(111111)和new SavingsAccount(222222),然后尝试使用CreateAccountActivity.getAccountNumberID(0)在另一个类中创建所有帐户,并得到以下错误 Process: bankapp, PID: 4918 java.lang.RuntimeException: Unab

因此,我正在用java制作一个android应用程序,并有以下几个类

我的问题是,当我在应用程序中创建帐户时,让我们说new CheckingAccount(111111)和new SavingsAccount(222222),然后尝试使用CreateAccountActivity.getAccountNumberID(0)在另一个类中创建所有帐户,并得到以下错误

   Process: bankapp, PID: 4918
   java.lang.RuntimeException: Unable to start activity 
   ComponentInfo{bankapp/bankapp.EditAccountActivity}:
   java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
         at android.os.Handler.dispatchMessage(Handler.java:105)
         at android.os.Looper.loop(Looper.java:164)
         at android.app.ActivityThread.main(ActivityThread.java:6541)
         at java.lang.reflect.Method.invoke(Native Method)
         at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
      Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.get(ArrayList.java:437)
         at bankapp.CreateAccountActivity.getAccountNumberID(CreateAccountActivity.java:131)
         at bankapp.EditAccountActivity.onCreate(EditAccountActivity.java:37)
         at android.app.Activity.performCreate(Activity.java:6975)
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
         at android.app.ActivityThread.-wrap11(Unknown Source:0) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
         at android.os.Handler.dispatchMessage(Handler.java:105) 
         at android.os.Looper.loop(Looper.java:164) 
         at android.app.ActivityThread.main(ActivityThread.java:6541) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
CreateAccountActivity.java

import android.content.Context;
import android.nfc.Tag;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class CreateAccountActivity extends AppCompatActivity implements 
AdapterView.OnItemSelectedListener{

    public static ArrayList<BankAccount> aAccount = new ArrayList<BankAccount>();

EditText accountNumberTV, initialBalanceTV;
String accountType;
Context context = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_create);



    // Spinner element
    Spinner spinner = (Spinner) findViewById(R.id.accountTypeSpinner);

    // Spinner click listener
    spinner.setOnItemSelectedListener(this);

    // Spinner Drop down elements
    List<String> categories = new ArrayList<String>();
    categories.add("Checking");
    categories.add("Savings");
    categories.add("Credit");

    // Creating adapter for spinner
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories);

    // Drop down layout style - list view with radio button
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // attaching data adapter to spinner
    spinner.setAdapter(dataAdapter);

    final Button SuSe = (Button) findViewById(R.id.createNewAccountButton);
    SuSe.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            accountNumberTV = (EditText) findViewById(R.id.accountNumberView);
            accountNumberTV.setTransformationMethod(null);

            initialBalanceTV = (EditText) findViewById(R.id.initialBalanceView)

        }
    });

}


@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    // On selecting a spinner item
    accountType = parent.getItemAtPosition(position).toString();

    // Showing selected spinner item
    //Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
}

public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub
}
public void CreateAccountButton(View view) {
    accountNumberTV = (EditText) findViewById(R.id.accountNumberView);
    accountNumberTV.setTransformationMethod(null);

    initialBalanceTV = (EditText) findViewById(R.id.initialBalanceView);


    String acctIDString = accountNumberTV.getText().toString();
    int acctID=Integer.parseInt(acctIDString);

    String initialBalanceString = initialBalanceTV.getText().toString();
    double initialBalance=Float.parseFloat(initialBalanceString);
    //bd.setUserInfo(1,newName, newAddress, context);

    switch(accountType) {
        case "Checking":

            aAccount.add(new CheckingAccount(acctID, initialBalance));
            break;
        case "Savings":

            aAccount.add(new SavingsAccount(acctID, initialBalance));
            break;
        case "Credit":
            // code block
            break;
    }

}
static public int getAccountNumberID (int x){
    return aAccount.get(x).getAcctID();
}
static public int getArraySize(){
  return aAccount.size();
}

public double getAccountBalance(int x){
    return aAccount.get(x).getCurrentBalance();
  }
}
SavingsAccount.java

public abstract class BankAccount {
private final int acctID;
double acctBalance = 0;
public BankAccount checking;
public BankAccount savings;
public BankAccount credit;

public BankAccount (int Id, double balance){
    this.acctID = Id;
    this.acctBalance = balance;
}


public void deposit (double amount){
    acctBalance = acctBalance + amount;
    //System.out.println(acctBalance);
}

public boolean withdraw (double amount){
    if(acctBalance<amount){
        //System.out.println("There are insufficient funds.");
        return false;
    } else
        acctBalance = acctBalance - amount;
    System.out.println(acctBalance);
    return true;
}

double balance (BankAccount acctID) {
    return acctBalance;
}

public double getCurrentBalance(){
    return acctBalance;
}

public int getAcctID () {
    return acctID;
}


public static boolean transfer (double amount, BankAccount fromAccount, BankAccount toAccount) {
    if (fromAccount.acctBalance > amount){
        fromAccount.acctBalance = fromAccount.acctBalance - amount;
        toAccount.acctBalance = toAccount.acctBalance + amount;
        //System.out.println(fromAccount.acctBalance);
        //System.out.println(toAccount.acctBalance);
        return true;
    } else
        //System.err.println("Insufficient funds");
    return false;
}

}
public class CheckingAccount extends BankAccount {
public BankAccount checking;

public CheckingAccount(int Id, double balance) {
    super(Id, balance);
}

public void deposit (double amount)
{
    super.deposit(amount);
}
}
public class SavingsAccount extends BankAccount{
public BankAccount savings;
public SavingsAccount(int Id, double balance) {
    super(Id, balance);
}
public void deposit (double amount)
{
    super.deposit(amount);
}
}
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

import java.util.ArrayList;
import java.util.List;


 public class EditAccountActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

//ArrayList<BankAccount> aAccount2=CreateAccountActivity.getList();
Context context = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_editaccount);
    int arraysize = CreateAccountActivity.getArraySize();


    // Spinner element
    Spinner spinner1 = (Spinner) findViewById(R.id.selectAccountSpinner);

    // Spinner click listener
    spinner1.setOnItemSelectedListener(this);

    // (2) create a simple static list of strings
    List<Integer> spinnerArray = new ArrayList<>();
    //spinnerArray.add(1);
    //spinnerArray.add(aAccount2.get(0).getAcctID());
    //spinnerArray.add(aAccount2.get(1).getAcctID());
    spinnerArray.add(CreateAccountActivity.getAccountNumberID(0));
    spinnerArray.add(CreateAccountActivity.getAccountNumberID(1));
    int i = 0;

  /*  do{

        spinnerArray.add(CreateAccountActivity.getAccountNumberID(i));
        i++;
    }while (i<2);
   */

    // (3) create an adapter from the list
    ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(
            this,
            android.R.layout.simple_spinner_item,
            spinnerArray
    );

 //adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

 // (4) set the adapter on the spinner
    spinner1.setAdapter(adapter);

}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
}
EditAccount.java

public abstract class BankAccount {
private final int acctID;
double acctBalance = 0;
public BankAccount checking;
public BankAccount savings;
public BankAccount credit;

public BankAccount (int Id, double balance){
    this.acctID = Id;
    this.acctBalance = balance;
}


public void deposit (double amount){
    acctBalance = acctBalance + amount;
    //System.out.println(acctBalance);
}

public boolean withdraw (double amount){
    if(acctBalance<amount){
        //System.out.println("There are insufficient funds.");
        return false;
    } else
        acctBalance = acctBalance - amount;
    System.out.println(acctBalance);
    return true;
}

double balance (BankAccount acctID) {
    return acctBalance;
}

public double getCurrentBalance(){
    return acctBalance;
}

public int getAcctID () {
    return acctID;
}


public static boolean transfer (double amount, BankAccount fromAccount, BankAccount toAccount) {
    if (fromAccount.acctBalance > amount){
        fromAccount.acctBalance = fromAccount.acctBalance - amount;
        toAccount.acctBalance = toAccount.acctBalance + amount;
        //System.out.println(fromAccount.acctBalance);
        //System.out.println(toAccount.acctBalance);
        return true;
    } else
        //System.err.println("Insufficient funds");
    return false;
}

}
public class CheckingAccount extends BankAccount {
public BankAccount checking;

public CheckingAccount(int Id, double balance) {
    super(Id, balance);
}

public void deposit (double amount)
{
    super.deposit(amount);
}
}
public class SavingsAccount extends BankAccount{
public BankAccount savings;
public SavingsAccount(int Id, double balance) {
    super(Id, balance);
}
public void deposit (double amount)
{
    super.deposit(amount);
}
}
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

import java.util.ArrayList;
import java.util.List;


 public class EditAccountActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

//ArrayList<BankAccount> aAccount2=CreateAccountActivity.getList();
Context context = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_editaccount);
    int arraysize = CreateAccountActivity.getArraySize();


    // Spinner element
    Spinner spinner1 = (Spinner) findViewById(R.id.selectAccountSpinner);

    // Spinner click listener
    spinner1.setOnItemSelectedListener(this);

    // (2) create a simple static list of strings
    List<Integer> spinnerArray = new ArrayList<>();
    //spinnerArray.add(1);
    //spinnerArray.add(aAccount2.get(0).getAcctID());
    //spinnerArray.add(aAccount2.get(1).getAcctID());
    spinnerArray.add(CreateAccountActivity.getAccountNumberID(0));
    spinnerArray.add(CreateAccountActivity.getAccountNumberID(1));
    int i = 0;

  /*  do{

        spinnerArray.add(CreateAccountActivity.getAccountNumberID(i));
        i++;
    }while (i<2);
   */

    // (3) create an adapter from the list
    ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(
            this,
            android.R.layout.simple_spinner_item,
            spinnerArray
    );

 //adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

 // (4) set the adapter on the spinner
    spinner1.setAdapter(adapter);

}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
}
导入android.content.Context;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Spinner;
导入java.util.ArrayList;
导入java.util.List;
公共类EditAccountActivity扩展AppCompativeActivity实现AdapterView.OnItemSelectedListener{
//ArrayList aaAccount2=CreateAccountActivity.getList();
Context=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_editaccount);
int arraysize=CreateAccountActivity.getArraySize();
//旋转元件
微调器微调器1=(微调器)findViewById(R.id.selectAccountSpinner);
//微调器单击侦听器
喷丝头1.SetonimSelectedListener(此);
//(2)创建一个简单的字符串静态列表
List spinnerray=new ArrayList();
//添加(1);
//add(aaAccount2.get(0.getAcctID());
//add(aaAccount2.get(1.getAcctID());
添加(CreateAccountActivity.getAccountNumberID(0));
add(CreateAccountActivity.getAccountNumberID(1));
int i=0;
/*做{
add(CreateAccountActivity.getAccountNumberID(i));
i++;
}而(我是父母){
}
}

将static与活动的实例变量结合使用不起作用。您可以使用ViewModels解决任务。您可以阅读有关它们的更多信息

以及ViewModel:

public class MyViewModel extends ViewModel { 
    public List<Account> getAccounts() {
        // return sth.
    }
}
公共类MyViewModel扩展了ViewModel{
公共帐户列表(){
//归还某物。
}
}

将static与活动的实例变量结合使用不起作用。您可以使用ViewModels解决任务。您可以阅读有关它们的更多信息

以及ViewModel:

public class MyViewModel extends ViewModel { 
    public List<Account> getAccounts() {
        // return sth.
    }
}
公共类MyViewModel扩展了ViewModel{
公共帐户列表(){
//归还某物。
}
}

是的,这完全奏效了。非常感谢你,你救了我的命。为什么以前没有人教我这个。我的教育可能是免费的,但男孩不好。是的,这完全奏效了。非常感谢你,你救了我的命。为什么以前没有人教我这个。我的教育可能是免费的,但男孩不好。