Includi .jar to Android Project (NoclassDeFoundError - VFY: impossibile risolvere la nuova istanza 812)

StackOverflow https://stackoverflow.com//questions/20001264

Domanda

Cosa voglio: Utilizzare un file JAR che contiene tutte le mie classi del modello (per il riutilizzo nel WebService ho separato i modelli) nel mio progetto Android. Sono nuovo per Android, quindi immagino di aver perso qualcosa? È necessario esportare le mie classi in modo diverso quando lo usi in Android?

Cosa ottengo:

`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)`
.

Cosa ho fatto: Per la generare ho usato un semplice progetto Java (non un progetto di biblioteca o qualcosa del genere e l'ha esportato come un barattolo. Posso usare la stessa libreria nel mio progetto Java WebService senza problemi.

Cosa ho provato: 1. Utilizzare Maineattività della classe generata automaticamente e aggiungi il seguente codice:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    System.err.println("TEST");// TODO: error here
    User user = new User();
    user.setDailyPoints(13);
}
.

    .
  1. Aggiungi le entità WW alla cartella Libs
  2. Fare clic con il pulsante destro del mouse sulla lib e scelto "Aggiungi al percorso di costruzione"
  3. Progetto pulito
  4. controllato ww-entità.jar in "ordine ed esportazione"
  5. Ha controllato Biblioteche private Android in "Order and Export"
  6. Ho provato a seguire un sacco di fili, che trattavano problemi simili, ma in qualche modo sembra che mi manca il punto. (Non c'è bisogno di dire che sono nuovo per Android e ha bisogno di una risposta completa per noobies giusto? ^^)

    Modifica:

    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  
    }
    
    .

Nessuna soluzione corretta

Altri suggerimenti

il modo più semplice per farlo (negli strumenti SDK 0.22.2.1, almeno) è quello di non esportare il barattolo, ma per aggiungere invece il tuo progetto ww-entities come dipendenza del tuo progetto Android (Path Build> Progetti).

.

È quindi necessario assicurarsi di controllare ww-entities nella scheda Ordina ed esportazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top