当前位置: 首页 > 知识库问答 >
问题:

Android Studio中的IllegalAccessException(目标Android为

郎正平
2023-03-14

在我的android项目中,我最初的目标是Android6,它运行得很好。

现在我在一个Android4.4设备上运行它(包括一个真实设备和一个AVD),它会因为一个IllegalAccessException而崩溃。

这就是它坠毁的地方

    this.PractitionerList.add(new
            PractitionerItem(1, "01A1234E", "Mary", "1st", "London", "Y")

    );

PractictionerItem是一个公共类,而PractictionerList是一个声明如下的arraylist

This.PractictionerList=new ArrayList();

这是logcat...

package org.nmc_uk.www.xxxxx;

import android.os.Parcel;
import android.os.Parcelable;

public class PractitionerItem implements Parcelable {
Integer PRN;
String PIN;
String Fname;
String Lname;
String Town;
String YesNo;



@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public void writeToParcel (Parcel dest, int flags) {
    dest.writeInt(PRN);
    dest.writeString(PIN);
    dest.writeString(Fname);
    dest.writeString(Lname);
    dest.writeString(Town);
    dest.writeString(YesNo);
}

private PractitionerItem(Parcel in){
    this.PRN = in.readInt();
    this.PIN = in.readString();
    this.Fname = in.readString();
    this.Lname = in.readString();
    this.Town = in.readString();
    this.YesNo = in.readString();
}

public static final Creator<PractitionerItem> CREATOR = new Creator<PractitionerItem>() {

    @Override
    public PractitionerItem createFromParcel(Parcel source) {
        return new PractitionerItem(source);
    }

    @Override
    public PractitionerItem[] newArray(int size) {
        return new PractitionerItem[size];
    }
};
public PractitionerItem(Integer PRN, String PIN, String Fname, String Lname, String Town, String YesNo){
    this.PRN = PRN;
    this.PIN = PIN;
    this.Fname = Fname;
    this.Lname = Lname;
    this.Town = Town;
    this.YesNo = YesNo;
}
Public class SearchTheRegister extends AppCompatActivity {

private ArrayList<PractitionerItem> PractitionerList;

private CustomAdapter practitioner_adapter;
.
.
.

 //// THIS LINE IS WHERE IT FAILS /////////////// 
    this.PractitionerList.add(new
            PractitionerItem(1, "01A1234E", "Mary", "1st", "London", "Y")

    );

有什么想法吗?

萨姆

共有1个答案

柯天宇
2023-03-14

我不确定这是否能解决您的问题,但我也有类似的问题,我意识到我的parcelable实现是错误的。我在下面为您生成了一个可打包的实现:

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeValue(this.PRN);
        dest.writeString(this.PIN);
        dest.writeString(this.Fname);
        dest.writeString(this.Lname);
        dest.writeString(this.Town);
        dest.writeString(this.YesNo);
    }

    public PractitionerItem() {
    }

    protected PractitionerItem(Parcel in) {
        this.PRN = (Integer) in.readValue(Integer.class.getClassLoader());
        this.PIN = in.readString();
        this.Fname = in.readString();
        this.Lname = in.readString();
        this.Town = in.readString();
        this.YesNo = in.readString();
    }

    public static final Creator<PractitionerItem> CREATOR = new Creator<PractitionerItem>() {
        @Override
        public PractitionerItem createFromParcel(Parcel source) {
            return new PractitionerItem(source);
        }

        @Override
        public PractitionerItem[] newArray(int size) {
            return new PractitionerItem[size];
        }
    };

如果这不起作用,您可以尝试在应用程序中添加multidex支持。关于KitKatArrayList和Parcelable有一个奇怪的问题。

要添加multidex支持,请执行以下操作:

首先改变你的等级,如下所示:

android {
    defaultConfig {
        ...
        multiDexEnabled true
        ...
    }
}

dependencies {
  ...
  compile 'com.android.support:multidex:1.0.0'
  ...

}

其次,从Multidex应用程序扩展应用程序,或在oncreate中调用Multidex.init:

public class YourApplication extends MultiDexApplication
{
    ...
}
public class YourApplication extends Application
{
    protected void attachBaseContext(Context base)
    {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}
 类似资料:
  • 嗨,我在sping有这个配置。 启动 Web 应用程序后,将弹出以下异常: 调试ctory.support.DefaultListableBeanFactory:221-创建单例bean'mongo'的共享实例 07:04:54336调试工厂支持。DefaultListableBeanFactory:450-创建bean“mongo”的实例 07:04:54,337调试ctory.support.

  • 我运行的是Mac OSX,我安装了android Studio-它启动正常。 问题1 我用一个空活动开始一个新项目。在最上面的窗户上我收到一条信息 问题2 我在底部窗口中看到以下错误: 错误:CompilesDKVersion android-L需要使用JDK 7 Open SDK Settings进行编译 打开文件 当我尝试在设备上运行项目时,我得到以下错误: 失败[INSTALL_FAILED

  • 我正在从eclipseADT迁移到android Studio,我可以从Eclipse使用相同的android SDK吗?

  • 我的类是的子类。这是一个看起来很普通的FXML控制器类: 我进行了两次和三次检查,以确保FXML中没有一个命名控件在controller类中也没有实例字段。所有实例字段都用标记。 FXML中controller类的名称与我的java文件相同,并且有适当的限定。该错误发生在调用之前,因此我不认为它与有任何关系,尽管我已经检查了它是否也用标记。 错误消息除了说它有修饰符“”之外,没有给我关于它有问题的

  • 我已经安装了最新的cordova。版本是4.3.0。我创建了一个空的Cordova项目: 然后我添加平台: 我用以下方法构建了该项目: 但我总是得到: 然后,我尝试将目标android sdk更改为19,因此在AndroidManifest.xml中,我更改了: 自: 我再次运行build命令,仍然得到完全相同的错误。这快把我逼疯了。有人有什么想法吗?我在同一台PC上构建了许多许多cordova项

  • 问题内容: 我将eclipse与android插件和sdk结合使用,但是由于没有目标,当执行此命令时,我无法创建虚拟设备: 我该怎么办? 和.............. 当我尝试在Eclipse AVD中安装可用软件包时,它涉及到: 正在下载SDK Platform Android 2.0 API5,版本1 SSL对等端错误地关闭…。 问题答案: 运行tools / android来检索目标。它将