Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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 Android:使用属性时出现空指针异常_Java_Android_Class_Nullpointerexception - Fatal编程技术网

Java Android:使用属性时出现空指针异常

Java Android:使用属性时出现空指针异常,java,android,class,nullpointerexception,Java,Android,Class,Nullpointerexception,我使用一个公共类将两条信息保存到一个数组中(这样我就可以很容易地获得名称和ID)。然而出于某种原因,它似乎不喜欢它 我在线路上遇到以下错误:- AssetDetails.ID=f.getString(f.getColumnIndex(“AssetObsID”) 出现错误的代码是: public static List<clsNameID> assetHelperTypes(){ Log.e("Asset Helper Types:", "Started"); clsN

我使用一个公共类将两条信息保存到一个数组中(这样我就可以很容易地获得名称和ID)。然而出于某种原因,它似乎不喜欢它

我在线路上遇到以下错误:-

AssetDetails.ID=f.getString(f.getColumnIndex(“AssetObsID”)

出现错误的代码是:

public static List<clsNameID> assetHelperTypes(){
    Log.e("Asset Helper Types:", "Started");
    clsNameID AssetDetails = null;
    List<clsNameID> mHelperNames = new ArrayList<clsNameID>();
    File dbfile = new File(Global.currentDBfull); 

    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
    Cursor f = db.rawQuery("select * from assetobservationtypes", null);  
    Log.e("Asset Helper Types:", "Cursor run");
        if(f.getCount() != 0) {
         f.moveToFirst();
            while(!f.isAfterLast()) {
                Log.e("Asset Helper Types:", "Finding Items");

                AssetDetails.ID = f.getString(f.getColumnIndex("AssetObsID"));
                AssetDetails.Name = f.getString(f.getColumnIndex("Observation"));

                mHelperNames.add(AssetDetails);
                Log.e("Asset Helper Types:", "Added Items");
            }
        }
    f.close();

    return mHelperNames;
}
我试着用以下方式来称呼它:

 public void addCondition(View view){


        List<clsNameID> mHelperNames = DBFunctions.assetHelperTypes();


        final List<Integer> mSelectedItems = new ArrayList<Integer>();

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("My Title")
                .setMultiChoiceItems(mHelperNames.toArray(new CharSequence[mHelperNames.size()]), null,
                        new DialogInterface.OnMultiChoiceClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which, boolean isChecked) {
                                if (isChecked) {

                                    mSelectedItems.add(which);
                                } else if (mSelectedItems.contains(which)) {

                                    mSelectedItems.remove(Integer
                                            .valueOf(which));
                                }
                            }
                        })

               .setPositiveButton("Save", new DialogInterface.OnClickListener() {
                   @Override
                   public void onClick(DialogInterface dialog, int id) {
                        //Create onlcick method
                   }
               })
               .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                   @Override
                   public void onClick(DialogInterface dialog, int id) {
                        //Create onlcick method
                   }
               });
        builder.show();

}
public void addCondition(视图){
List mHelperNames=DBFunctions.AssetPerTypes();
最终列表mSelectedItems=newarraylist();
AlertDialog.Builder=新建AlertDialog.Builder(此);
builder.setTitle(“我的标题”)
.setMultiChoiceItems(mHelperNames.toArray(新字符序列[mHelperNames.size()]),null,
新的DialogInterface.OnMultiChoiceClickListener(){
@凌驾
公共void onClick(对话框接口对话框,
int,其中布尔值已检查){
如果(已检查){
mSelectedItems.add(哪个);
}else if(mSelectedItems.contains(which)){
mSelectedItems.remove(整数
.价值(其中);
}
}
})
.setPositiveButton(“保存”,新建DialogInterface.OnClickListener()){
@凌驾
public void onClick(DialogInterface对话框,int-id){
//创建onlcick方法
}
})
.setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
@凌驾
public void onClick(DialogInterface对话框,int-id){
//创建onlcick方法
}
});
builder.show();
}

通过调用
new
操作符,您没有创建
clsNameID
的对象,这就是对象
AssetDetails
为空的原因。我刚刚添加了线条来创建对象。。查看带有我的评论“添加此行…”的行

公共静态列表资产属性(){
Log.e(“资产助手类型:”,“已启动”);
clsNameID AssetDetails=null;
List mHelperNames=new ArrayList();
File dbfile=新文件(Global.currentDBfull);
SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase(dbfile,null);
游标f=db.rawQuery(“从AssetTobservationTypes中选择*”,null);
Log.e(“资产助手类型:”,“游标运行”);
如果(f.getCount()!=0){
f、 moveToFirst();
而(!f.isAfterLast()){
//添加这一行。。。。
AssetDetails=newclsnameid();
Log.e(“资产助手类型:”,“查找项”);
AssetDetails.ID=f.getString(f.getColumnIndex(“AssetObsID”);
AssetDetails.Name=f.getString(f.getColumnIndex(“观察”);
mHelperNames.add(资产详情);
Log.e(“资产助手类型:”,“添加项”);
}
}
f、 close();
返回mHelperName;
}

希望对您有所帮助。

首先,Java中的类名应该以大写字母开头,因此您的自定义类应该称为
ClsNameID
。此外,变量应该以小写字母开头,因此您调用的
AssetDetails
引用应该是
AssetDetails
,对于
ID
Name
也是如此

一旦您进行了这些更改,那么当您访问
ID
Name
字段时,更明显的是它是在类的实例上执行的,而不是在类的
静态属性上执行的。比较两段代码:

clsNameID AssetDetails = null;
...
AssetDetails.ID = f.getString(f.getColumnIndex("AssetObsID"));
AssetDetails.Name = f.getString(f.getColumnIndex("Observation"));

更容易看出,编写第二组代码时出现了错误,因为
assetDetails
显然被认为是一个实例,而第一组代码模棱两可,令人困惑

要解决您的问题,您应该按照其他海报的说明进行操作,并在尝试使用类之前创建类的实例:

ClsNameID assetDetails = new ClsNameID();

发布完整堆栈跟踪,请“您从未初始化过
AssetDetails
,它为空。您正在尝试访问它的
ID
。麻烦解释一下您做了哪些更改。否则就没什么帮助了。请用我的评论检查这行“添加这行”谢谢-非常有意义
public static List<clsNameID> assetHelperTypes(){
    Log.e("Asset Helper Types:", "Started");
    clsNameID AssetDetails = null;
    List<clsNameID> mHelperNames = new ArrayList<clsNameID>();
    File dbfile = new File(Global.currentDBfull); 

    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
    Cursor f = db.rawQuery("select * from assetobservationtypes", null);  
    Log.e("Asset Helper Types:", "Cursor run");
        if(f.getCount() != 0) {
         f.moveToFirst();
            while(!f.isAfterLast()) {
                          //add this line....
                          AssetDetails     = new clsNameID();
                Log.e("Asset Helper Types:", "Finding Items");

                AssetDetails.ID = f.getString(f.getColumnIndex("AssetObsID"));
                AssetDetails.Name = f.getString(f.getColumnIndex("Observation"));

                mHelperNames.add(AssetDetails);
                Log.e("Asset Helper Types:", "Added Items");
            }
        }
    f.close();

    return mHelperNames;
}
clsNameID AssetDetails = null;
...
AssetDetails.ID = f.getString(f.getColumnIndex("AssetObsID"));
AssetDetails.Name = f.getString(f.getColumnIndex("Observation"));
ClsNameID assetDetails = null;
...
assetDetails.id = f.getString(f.getColumnIndex("AssetObsID"));
assetDetails.name = f.getString(f.getColumnIndex("Observation"));
ClsNameID assetDetails = new ClsNameID();