java.lang.IllegalAccessException:无法从 java.lang.Class<com.xxx.xxxx><com.orm.SugarRecord> 访问 java.lang.Class

问题描述 投票:0回答:1

我使用 Sugar ORM 创建的 SQL 表出现 IllegalAccessException。我正在做的是获取联系人并将其发送到服务器进行某些操作,然后返回一个我使用 JSON 解析并显示的值。该操作是通过使用服务来完成的。当我搜索表以获取值时,会引发异常。

private void nonstoprun()
{
    handler = new Handler();
    update = new Runnable()
     {
        @Override
        public void run()
        {
         ArrayList<mobstat> musers1 = (ArrayList<mobstat>) mobstat.listAll(mobstat.class); //getting exception here
         setData(musers1);
         handler.postDelayed(this, 1000);
        }

         private void setData(ArrayList<mobstat> musers1)
         {
          musers.clear();
          musers.addAll(musers1);
          descAdapter.notifyDataSetChanged();
         }
     };
        handler.postDelayed(update, 10);
}

线路异常

ArrayList<mobstat> musers1 = (ArrayList<mobstat>) mobstat.listAll(mobstat.class); 

例外:

java.lang.IllegalAccessException: java.lang.Class<com.xxx.xxxx> is not  accessible from java.lang.Class<com.orm.SugarRecord>

我正在 Android 模拟器 (Nougat) 中运行代码

mobstat 类:

import com.orm.SugarRecord;
import com.orm.dsl.Unique;
class mobstat extends SugarRecord {
@Unique
String name;
String status;
long stime;

public mobstat(){  }

mobstat(String name, String status, long stime) {
    this.name = name;
    this.status = status;
    this.stime = stime;
}

@Override
public String toString() {
    return status;
}

String getname(){
    return name;
}
String getstatus(){
    return status;
}
}
android sqlite sugarorm
1个回答
0
投票

我知道这个问题似乎很老了,但我们又来了......

错误明确指出

java.lang.IllegalAccessException
,这意味着您需要设置您正在获取/设置的properties或您的
init()
,即
SugarRecord
上的构造函数public
访问级别。 这样就可以访问了:)

目前看起来它是私人的,即您的

setters & getters
private
。 (将它们留空表示它们是私有的)

如果您不确定要获取或设置哪些值,最好为类的所有 getter 和 setter 分配访问级别

public


class mobstat extends SugarRecord { @Unique String name; String status; long stime; public mobstat(){ } public mobstat(String name, String status, long stime) { this.name = name; this.status = status; this.stime = stime; } ..... public String getname(){ return name; } }
和+1,
如果您在后台执行

<class>.listAll

的事情,即使用
AsyncTask,那就更好了

© www.soinside.com 2019 - 2024. All rights reserved.