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

时间:2017-03-03 11:20:07

标签: android sqlite sugarorm

我正在使用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;
}
}

1 个答案:

答案 0 :(得分:0)

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

错误明确指出java.lang.IllegalAccessException,这意味着您需要设置要获取/设置的属性init(),即{{1}上的构造函数} 访问级别为SugarRecord 以便可以对其进行访问:)

当前看起来它是私有的,即您的publicsetters & getters。 (将其保留为空白表示它们是私有的)

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

public

和+1, 最好在后台执行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; } } ,例如使用 AsyncTask

如果您觉得这很有用,则可以在Google Play上奖励自己和自己玩Sticky Bubble