Incluez .jar au projet Android (NoClassDefFoundError - VFY :impossible de résoudre la nouvelle instance 812)
-
20-12-2019 - |
Question
Ce que je veux: Utilisez un fichier jar qui contient toutes mes classes de modèles (pour réutilisation dans le webservice j'ai séparé les modèles) dans mon projet Android.Je suis nouveau sur Android, donc je suppose que j'ai raté quelque chose ?est-il nécessaire d'exporter mes cours différemment lorsque je l'utilise sous Android ?
Ce que j'obtiens :
`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)`
Ce que j'ai fait:Pour le générer, j'ai utilisé un simple projet Java (pas un projet de bibliothèque ou quelque chose comme ça) et je l'ai exporté sous forme de pot.Je peux utiliser la même bibliothèque dans mon projet Java de service Web sans aucun problème.
Ce que j'ai essayé :1.Utilisez la classe MainActivity générée automatiquement et ajoutez le code suivant :
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.err.println("TEST");// TODO: error here
User user = new User();
user.setDailyPoints(13);
}
- Ajouter des entités WW au dossier libs
- Faites un clic droit sur la bibliothèque et choisissez "Ajouter au chemin de construction"
- Projet propre
- Vérifié ww-entities.jar dans "Commande et exportation"
- Vérification des bibliothèques privées Android dans "Commander et exporter"
J'ai essayé de suivre de nombreux sujets traitant de problèmes similaires, mais il semble que je ne comprenne pas.(pas besoin de dire que je suis nouveau sur Android et que j'ai besoin d'une réponse complète pour les novices, n'est-ce pas ?^^)
Modifier:
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
}
Pas de solution correcte
Autres conseils
Le moyen le plus simple de procéder (au moins dans les outils SDK 0.22.2.1) est de ne pas exporter le fichier jar, mais d'ajouter votre fichier jar. ww-entities
projet en tant que dépendance de votre projet Android (Build Path > Projects).
Vous devez ensuite vous assurer de vérifier ww-entities
dans l'onglet Commande et Exportation.