質問

I have made this test project to try to use ormlite to export a database to a csv file. So I have searched for this error and tried all of the things suggested in other posts, all resulting in the same error:

02-17 14:33:24.810: E/AndroidRuntime(14351): FATAL EXCEPTION: main
02-17 14:33:24.810: E/AndroidRuntime(14351): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.webs.dimensiongamesculpts.android_ormlite_sample_master/com.webs.dimensiongamesculpts.android_ormlite_sample_master.main}: java.lang.ClassNotFoundException: com.webs.dimensiongamesculpts.android_ormlite_sample_master.main in loader dalvik.system.PathClassLoader[/data/app/com.webs.dimensiongamesculpts.android_ormlite_sample_master-2.apk]
02-17 14:33:24.810: E/AndroidRuntime(14351):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1618)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1716)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at android.app.ActivityThread.access$1500(ActivityThread.java:124)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at android.os.Looper.loop(Looper.java:130)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at android.app.ActivityThread.main(ActivityThread.java:3806)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at java.lang.reflect.Method.invokeNative(Native Method)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at java.lang.reflect.Method.invoke(Method.java:507)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at dalvik.system.NativeStart.main(Native Method)
02-17 14:33:24.810: E/AndroidRuntime(14351): Caused by: java.lang.ClassNotFoundException: com.webs.dimensiongamesculpts.android_ormlite_sample_master.main in loader dalvik.system.PathClassLoader[/data/app/com.webs.dimensiongamesculpts.android_ormlite_sample_master-2.apk]
02-17 14:33:24.810: E/AndroidRuntime(14351):    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
02-17 14:33:24.810: E/AndroidRuntime(14351):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1610)
02-17 14:33:24.810: E/AndroidRuntime(14351):    ... 11 more

I have a main.xml in the layout folder in res. And all my external jars are in the libs folder.

Here is my Main.java file:

package com.webs.dimensiongamesculpts.android_ormlite_sample_master;

import com.webs.dimensiongamesculpts.android_ormlite_sample_master.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Main extends Activity {

    TextView txtOutput;
    Repo repo;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        txtOutput = (TextView) findViewById(R.id.output);

        repo = new Repo(this);

        User user = new User("Bruno", "Shadow", "MySecretPassword",
                "email@gmail.com");

        txtOutput.append("Creating User: " + user.getAlias());
        user.save(repo);
        txtOutput.append("\nUser: " + user.getAlias()
                + " created successfully!");
        user = repo.Users.getByUsername("Shadow");
        txtOutput.append("\nUser: " + user.getAlias()
                + " retrieved successfully!");
        user.delete(repo);
        txtOutput.append("\nUser: " + user.getAlias()
                + " deleted successfully!");

    }
}

and here is my AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.webs.dimensiongamesculpts.android_ormlite_sample_master"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="19" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".main"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Thanks in advance to anyone who might know the answer.

Here is the User.java:

package com.webs.dimensiongamesculpts.android_ormlite_sample_master;

import com.webs.dimensiongamesculpts.android_ormlite_sample_master.Repo;
import com.j256.ormlite.field.DatabaseField;

public class User {

    @DatabaseField(id = true) 
    String username;
    @DatabaseField
    String password;
    @DatabaseField
    String email;
    @DatabaseField
    String alias;

    public User() {
        // needed by ormlite
    }

    public User(String alias, String username, String password, String email) {
        this.alias = alias;
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUsername() {
        return username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    public void setAlias(String alias) {
        this.alias = alias;
    }

    public String getAlias() {
        return alias;
    }


    public int save(Repo repo)
    {
        if(repo.Users.getByUsername(username) == null)
        {
            return repo.Users.create(this);
        }
        else
        {
            return repo.Users.update(this);
        }
    }

    public int delete(Repo repo)
    {
        return repo.Users.delete(this);
    }

    public String toString()
    {
        return alias;
    }

}

Here is the DatabaseHelper.java:

package com.webs.dimensiongamesculpts.android_ormlite_sample_master;

import java.io.IOException;
import java.sql.SQLException;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.webs.dimensiongamesculpts.android_ormlite_sample_master.User;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.BaseDaoImpl;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.DaoManager;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

    private static final String DATABASE_NAME = "db.sqlite";
    private static final int DATABASE_VERSION = 1;

    private Dao<User, String> userDao = null;


    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

        DatabaseInitializer initializer = new DatabaseInitializer(context);
        try {
            initializer.createDatabase();
            initializer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    @Override
    public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
        try {
            Log.i(DatabaseHelper.class.getName(), "onCreate");

            TableUtils.createTable(connectionSource, User.class);

        } catch (SQLException e) {
            Log.e(DatabaseHelper.class.getName(), "Can't create database", e);
            throw new RuntimeException(e);
        }
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) {
        try {
            Log.i(DatabaseHelper.class.getName(), "onUpgrade");

            TableUtils.dropTable(connectionSource, User.class, true);

            onCreate(db);
        } catch (SQLException e) {
            Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e);
            throw new RuntimeException(e);
        }
    }


    public Dao<User, String> getUserDao() throws SQLException {
        if (userDao == null) {
            userDao = DaoManager.createDao(getConnectionSource(), User.class);
        }
        return userDao;
    }



    @Override
    public void close() {
        super.close();
        userDao = null;
    }
}
役に立ちましたか?

解決

In the manifest change the name of the activity to .Main instead of .main

他のヒント

Capitalization is important. Change android:name=".main" to android:name=".Main".

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top