2013-11-15 29 views
0

我想要什么: 使用包含所有模型类的jar文件(用于在web服务中重用,我将模型分开)在我的android项目。我是新来的机器人,所以我想我错过了什么?在Android中使用它时,有必要以不同的方式导出我的类?将.jar包含到android项目中(NoClassDefFoundError - VFY:无法解析新实例812)

我得到什么:

`11-15 12:26:14.082: E/Trace(1776): error opening trace file: No such file or directory (2) 
11-15 12:26:14.152: E/dalvikvm(1776): Could not find class 'ww.entities.model.User', referenced from method com.example.weightwatchersapp.MainActivity.onCreate 
11-15 12:26:14.172: W/dalvikvm(1776): VFY: unable to resolve new-instance 812 (Lww/entities/model/User;) in Lcom/example/weightwatchersapp/MainActivity; 
11-15 12:26:14.172: D/dalvikvm(1776): VFY: replacing opcode 0x22 at 0x000a 
11-15 12:26:14.182: D/dalvikvm(1776): DexOpt: unable to opt direct call 0x1499 at 0x0c in Lcom/example/weightwatchersapp/MainActivity;.onCreate 
11-15 12:26:14.212: W/System.err(1776): TEST 
11-15 12:26:14.262: D/AndroidRuntime(1776): Shutting down VM 
11-15 12:26:14.262: W/dalvikvm(1776): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
11-15 12:26:14.292: E/AndroidRuntime(1776): FATAL EXCEPTION: main 
11-15 12:26:14.292: E/AndroidRuntime(1776): java.lang.NoClassDefFoundError: ww.entities.model.User 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at com.example.weightwatchersapp.MainActivity.onCreate(MainActivity.java:17) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at android.app.Activity.performCreate(Activity.java:5104) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at android.os.Looper.loop(Looper.java:137) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at java.lang.reflect.Method.invoke(Method.java:511) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
11-15 12:26:14.292: E/AndroidRuntime(1776):  at dalvik.system.NativeStart.main(Native Method)` 

我做了什么: 对于它,我用一个简单的Java项目(不是库项目或这样的事情,并出口它作为一个罐子产生 我可以在我的web服务java项目中使用相同的库,没有任何问题

我试过的: 1.使用自动生成的cl屁股MainActivity并添加以下代码:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    System.err.println("TEST");// TODO: error here 
    User user = new User(); 
    user.setDailyPoints(13); 
} 
  1. 添加WW-实体libs文件夹
  2. 右键单击的lib并选择 “添加到构建路径”
  3. 清洁工程
  4. 经过-Ww-上entities.jar在“排序和导出”
  5. 检查Android私人图书馆“排序和导出”

我试图遵循很多线程,即对待类似的问题,但不知何故,似乎我错过了这一点。 (没必要说i'm新的Android和需要noobies权全面的回答^^?)

编辑:

I´m using ormlite with my models so i.e. my class User looks like: 
public class User implements Serializable { 
    private static final long serialVersionUID = -2057474913370787753L; 
    @DatabaseField(generatedId = true) 
    private long id; 
    @DatabaseField(canBeNull = false, unique = true) 
    private String username; 
    @DatabaseField 
    private String password; 
    @DatabaseField 
    private String email; 
    @DatabaseField 
    private String forename; 
    @DatabaseField 
    private String surname; 
    @DatabaseField 
    private Date birthday; 
    @DatabaseField 
    private String sex; 
    @DatabaseField 
    private double height; 
    @DatabaseField 
    private int dailyPoints; 
    @DatabaseField 
    private int weeklyPoints; 
    @DatabaseField(foreign = true, foreignAutoCreate = true, foreignAutoRefresh = true) 
    private OnlineUserFlags onlineUserFlags; 
    @DatabaseField 
    private boolean showProfileOnline; 

    public User() { 
    } 

    public User(String username, String password, String email, String forename, String surname, Date birthday, String sex, double height, int dailyPoints, int weeklyPoints, OnlineUserFlags onlineUserFlags, boolean showProfileOnline) { 
     super(); 
     this.username = username; 
     this.password = password; 
     this.email = email; 
     this.forename = forename; 
     this.surname = surname; 
     this.birthday = birthday; 
     this.sex = sex; 
     this.height = height; 
     this.dailyPoints = dailyPoints; 
     this.weeklyPoints = weeklyPoints; 
     this.onlineUserFlags = onlineUserFlags; 
     this.showProfileOnline = showProfileOnline; 
    } 

    @Override 
    public int hashCode() { 
     //generated hascode method 
    } 

    @Override 
    public boolean equals(Object obj) { 
    //generated equals method 
    } 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 
    //...getters/setters 
} 

回答

0

这样做的最简单的方法(在SDK工具0.22。 2.1,至少)是不导出罐子,而是添加你的ww-entities项目作为你的android项目(构建路径>项目)的依赖项。

然后您需要确保您在订单和导出选项卡中检查ww-entities

+0

我按照你的说法试过,但可惜这对我也不起作用。因为类在我的Java项目中为我工作,我只能假设他们的一些Android特定问题...我使用ormlite这些模型,这可能是一个问题吗? – Asamandra

+0

我不相信ormlite会是一个问题。我会在接下来的24小时内尝试重现这一点。 – Martin

+0

非常感谢!一些额外的信息:类的用法工作得很好,如果我只是将它们复制到android项目中..我说我在开发过程中搞砸了项目(这个jar已经在几周前工作过了),但是我设置了一个新的项目,并尝试相同的,它没有工作,所以也许Android版本或清单搞砸了? (对于那个android项目,我真的无能为力......) – Asamandra

相关问题