2017-11-24 2 views
0

사용자 정의 객체의 Arraylist는 다른 사용자 정의 객체의 arraylists를 포함 할 수 있습니까? 어떻게 작동할까요?사용자 정의 객체의 Arraylist는 다른 사용자 정의 객체의 arraylists를 포함 할 수 있습니까?

내가 시도 :

public class BankAccount { 
    private String mTitle; 
    private float mBalance; 
    private ArrayList<sE> mHistory; 

    public BankAccount(String title) { 
     mTitle = title; 
     mPrefFile = null; 
     mBalance = 0; 
     mHistory = new ArrayList<>(); 
    } 

    public void changeBalance(float newBalance) { 
     mBalance = newBalance; 
    } 

    public String getTitle() { 
     return mTitle; 
    } 

    public String getPrefFile() { 
     return mPrefFile; 
    } 

    public float getBalance() { 
     return mBalance; 
    } 

    public ArrayList<sE> getHistoryArrayList() { 
     return mHistory; 
    } 

    public void addToHistoryArrayList(String Title, Boolean IsEarning, float Amount) { 
     mHistory.add(new sE(Title, IsEarning, Amount)); 
    } 

    //sE stands for Spending/Earning 
    public class sE { 
     private String mTitle; 
     private Boolean mIsEarning; 
     private float mAmount; 

     public sE(String Title, Boolean IsEarning, float Amount) { 
      mTitle = Title; 
      mIsEarning = IsEarning; 
      mAmount = Amount; 
     } 

     public String getTitle() { 
      return mTitle; 
     } 

     public Boolean getIsEarning() { 
      return mIsEarning; 
     } 

     public float getAmount() { 
      return mAmount; 
     } 
    } 
} 

그러나 역사의 배열에 셀레늄 개체를 추가하려고 할 때 그것이 나에게 오류를 제공합니다

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference

내가 그 문제를 해결할 수 있습니까? 어떤 도움을 주셔서 감사합니다!

+0

mHistory = new ArrayList <>() 객체를 추가 할 수 있습니다. – isaace

+2

새로운 sE 객체를 추가하려고 할 때 ArrayList가 null임을 나타냅니다. 이미 생성자에서 ArrayList를 초기화했기 때문에 의미가 없습니다. 이 코드가 완전한 코드라고 확신합니까? 그 이상의 코드는 없습니다. ArrayList가 귀하의 코드에서 null이되는 곳. –

+0

나는 BankAccount Objects의 arraylist를 가지고 있는데, gson과 json과 sharedpreferences에 저장한다. 내가로드하고 그것에 쓰고 하나의 활동에 arraylist를 저장하면 은행 계좌 객체를 현재 은행 계좌 객체의 sE (History) Arraylist를 볼 수있는 액티비티에 표시하려고합니다. – jonasxd360

답변

0

위의 코드는 올 바릅니다. 생성자에서 새 ArrayList를 생성 한 다음 새 sE를 추가합니다. 괜찮습니다. 하지만 중첩 ArrayList를 만들려고하면 추가 한 각 요소에 대해 새 ArrayList 요소를 만들어야합니다.

ArrayList<ArrayList<sE>> nestedList = new ArrayList<>(); 

그리고 그것 뿐이다

nestedList.get(0).add(new sE(...)); 

를 사용하는

nestedList.add(new ArrayList<>()); 

그리고 추가 요소를 추가하는 동안

.

+1

OP가 기록을 쓰고 기록에 객체를 추가 할 때 오류가 발생합니다. 왜 오류입니까? – isaace

+0

이 코드를 어디에 써야합니까? (BankAccount.java 클래스 또는 액티비티에 추가 할 때) 도움을 주셔서 감사합니다! – jonasxd360

+0

BankAccount 클래스 자체입니다. 여기에 코드 중첩 ArrayList가 상주합니다. –

관련 문제