是否可以将用户定义的数据类型置于1级以上

时间:2015-08-08 09:00:16

标签: java android custom-data-type

我正在开发一个项目,其数据结构深度超过1级,我尝试将不同的用户定义数据类型设置为保存所有级别的信息。

第一级:一个只有一个LevelList为2级数据类型的类,以及一些访问所有级别数据的函数。

第二级:一个类,它有一些标准变量和一个Level3数据类型的ArrayList以及一些函数。

第三级:某些标准变量的类/记录

第一级数据类型的实例应该由我的应用程序的多个活动使用(几乎所有)。

这是我的问题:我可以初始化第一级并将一些对象添加到列表中,但我无法使用第二级。如果我在第二级列表中添加一些对象似乎都很好,但是当我访问此数据时,会发生NullPointerException

这是我的问题:是否可以将数据类型设置为超过1级?我应该在哪里搜索错误。

为了更好地理解来源:

modulData.java(第一级)

package de.myApp.dataholder;

import java.util.ArrayList;
import android.util.Log;

public class modulData {

    // Constructor
    private static final modulData mainModulDataHolder = new modulData();
    public static modulData getInstance() {return mainModulDataHolder;}

    // Data
    private ArrayList<isModulData> mIsModulData;

    // Functions
    public void init() {
        this.mIsModulData = new ArrayList<isModulData>();
    }

    public isModulData getModul(int mID) {
        isModulData result = null;
        int i;
        for (i = 0; i < mIsModulData.size(); i++) {
            if (mIsModulData.get(i).ID() == mID) {
                result = mIsModulData.get(i);
                break;
            }
        }
        return result;
    }

    public isCatData getCategory(int mID, int cID) {
        isCatData result = new isCatData();
        isCatData buffer = new isCatData();
        int i,j ;
        for (i = 0; i < mIsModulData.size(); i++) {
            if (mIsModulData.get(i).ID() == mID) {
                for(j = 0; j < mIsModulData.get(i).CountCategorys(); j++) {
                    buffer = mIsModulData.get(i).getCategory(j);
                    if (buffer.ID() == cID) {
                        result = buffer;
                        break;
                    }
                }

            }
        }
        return result;
    }

    public int ModulCount() {
        int result = 0;
        if (mIsModulData != null) { result = mIsModulData.size(); }
        return result;
    }

    public int CategoryCount(int mID) {
        int result = -1;
        int i;
        for (i = 0; i < mIsModulData.size(); i++) {
            if (mIsModulData.get(i).ID() == mID) {
                result = mIsModulData.get(i).CountCategorys();
                break;
            }
        }
        return result;
    }

    public int addModulWithJSON(String jsonString) {
        int result = -1;
        isModulData newModul = new isModulData();
        newModul.initCategorys();
        if (mIsModulData == null) { this.init(); }
        result = newModul.decodeFromJSON(jsonString);
        mIsModulData.add(newModul);
        return result;
    }

    public int addCategoryWithJSON(int mID, String jsonString) {
        int result = -1;
        int i;
        for (i = 0; i < mIsModulData.size(); i++){
            if (mIsModulData.get(i).ID() == mID) {
                result = mIsModulData.get(i).addCategoryWithJSON(jsonString);
                Log.i("AddCategoryWithJSON","Add Category "+ String.valueOf(result));

// Here is the Problem: Added but no access to Data. Null Object reference !!!!

                    Log.i("AddCategoryWithJSON", mIsModulData.get(mID).getCategory(result).Title());
                break;
            }
        }
        return result;
    }

}

isModulData.java(第二级)

package de.myApp.dataholder;

import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;

import android.util.Log;

public class isModulData {

    // Constructor
    private static final isModulData modulDataHolder = new isModulData();
    public static isModulData getInstance() {return modulDataHolder;}

    // Data
    private ArrayList<isCatData> mIsCatData;
    private int mID;
    private String mTitle;
    private boolean misActive;
    private int mBackgroundID;

    // Functions
    public int ID() { return this.mID; }
    public String Title() { return this.mTitle; }
    public boolean ActiveState() { return this.misActive; }
    public int BackgroundID() { return this.mBackgroundID; }

    public int decodeFromJSON(String jsonString) {
        int result;
        try {
            JSONArray jArray        = new JSONArray(jsonString);
            this.mID                = Integer.parseInt(jArray.getString(0).toString());
            this.mTitle             = jArray.getString(1).toString();
            this.misActive          = Boolean.parseBoolean(jArray.getString(2).toString());
            this.mBackgroundID      = Integer.parseInt(jArray.getString(3).toString());
            result = this.mID;
        } catch (JSONException e) {
            e.printStackTrace();
            Log.w("JSONDecode CMD801","Decode raised in JSONException ["+e.toString()+"]");
            result = -1;
        }
        return result;
    }

    public int addCategoryWithJSON(String jsonString) {
        int result = -1;
        if (this.mIsCatData == null)  { this.initCategorys(); }
        isCatData cNewCategory = new isCatData();
        result = cNewCategory.decodeFromJSON(jsonString);
        this.mIsCatData.add(cNewCategory);
        return result;
    }

    public isCatData getCategory(int cID) {
        isCatData result = new isCatData();
        if (cID < mIsCatData.size() -1) {
            result = mIsCatData.get(cID);
        } else {
            result = null;
        }
        return result;
    }

    public void initCategorys() {
        this.mIsCatData = new ArrayList<isCatData>();
    }

    public int CountCategorys() {
        return this.mIsCatData.size();
    }
}

isCatData.java(第三级)

package de.myApp.dataholder;

import org.json.JSONArray;
import org.json.JSONException;
import android.util.Log;

public class isCatData {

    // Constructor
    private static final isCatData catDataHolder = new isCatData();
    public static isCatData getInstance() {return catDataHolder;}

    // Data
    private int cID;
    private String cTitle;
    private boolean cisActive;
    private boolean cisWriteEnable;
    private int cBackgroundID;

    // Functions
    public int ID() { return this.cID; }
    public String Title() { return this.cTitle; }
    public boolean ActiveState() { return this.cisActive; }
    public boolean WriteEnableState() { return this.cisWriteEnable; }
    public int BackgroundID() { return this.cBackgroundID; }        

    public int decodeFromJSON(String jsonString) {
        int result;
        try {
            JSONArray jArray        = new JSONArray(jsonString);
            this.cID                = Integer.parseInt(jArray.getString(0).toString());
            this.cTitle             = jArray.getString(1).toString();
            this.cisActive          = Boolean.parseBoolean(jArray.getString(2).toString());
            this.cisWriteEnable     = Boolean.parseBoolean(jArray.getString(3).toString());
            this.cBackgroundID      = Integer.parseInt(jArray.getString(4).toString());
            result = this.cID;
        } catch (JSONException e) {
            e.printStackTrace();
            Log.w("JSONDecode CMD801","Decode raised in JSONException ["+e.toString()+"]");
            result = -1;
        }
        return result;
    }

}

0 个答案:

没有答案