2015-02-26 2 views
1

Я добавил файл .jar в папку lib в директории проекта: enter image description hereAndroid Studio - java.lang.NoClassDefFoundError

Далее я правой нажал на каждого .jar файла и выбран «Добавить в библиотеку».

Затем я добавил зависимостей в файл build.gradle:

apply plugin: 'com.android.application' 

    android { 
     compileSdkVersion 21 
     buildToolsVersion "21.1.2" 

     defaultConfig { 
      applicationId "com.ryzomarmory.crm.ryzomarmory" 
      minSdkVersion 16 
      targetSdkVersion 21 
      versionCode 1 
      versionName "1.0" 
     } 
     buildTypes { 
      release { 
       minifyEnabled false 
       proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      } 
     } 
    } 

    dependencies { 
     compile fileTree(dir: 'lib', include: ['*.jar']) 
     compile 'com.android.support:appcompat-v7:21.0.3' 
     compile files('commons-dbcp-1.4.jar') 
     compile files('commons-pool-1.6.jar') 
     compile files('mysql-connector-java-5.1.30-bin.jar') 
    } 

При попытке запустить приложение для Android он отображает java.lang.NoClassDefFoundError. Вот полный лог:

02-26 11:13:54.671 20960-20960/com.ryzomarmory.crm.ryzomarmory E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.ryzomarmory.crm.ryzomarmory, PID: 20960 
    java.lang.NoClassDefFoundError: com.mysql.jdbc.jdbc2.optional.MysqlDataSource 
      at com.ryzomarmory.crm.ryzomarmory.DataSourceFactory.getMySQLDataSource(DataSourceFactory.java:19) 
      at com.ryzomarmory.crm.ryzomarmory.LoginService.<init>(LoginService.java:13) 
      at com.ryzomarmory.crm.ryzomarmory.LoginActivity.<init>(LoginActivity.java:18) 
      at java.lang.reflect.Constructor.newInstance(Native Method) 
      at java.lang.Class.newInstance(Class.java:1572) 
      at android.app.Instrumentation.newActivity(Instrumentation.java:1065) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
      at android.app.ActivityThread.access$800(ActivityThread.java:144) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

я выполнил команду gradlew.bat clean в каталоге приложения, как это было предложено в большинстве подобных вопросов. Но это не решает проблему для меня.

редактировать: Код в этом блоке try вызывает ошибку:

import javax.sql.DataSource; 

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; 

// establishes a persistent database connection 
public class DataSourceFactory { 

    public static DataSource getMySQLDataSource() { 
     MysqlDataSource mysqlDS   = null; 
     final Configuration conf  = new Configuration(); 
     final String dbHostName   = conf.getDbHostname(); 
     final String dbDatabaseName  = conf.getDbDatabaseName(); 
     final String dbUsername   = conf.getDbUsername(); 
     final String dbPassword   = conf.getDbPassword(); 

     try { 
      mysqlDS = new MysqlDataSource(); 
      mysqlDS.setURL(dbHostName + dbDatabaseName); 
      mysqlDS.setUser(dbUsername); 
      mysqlDS.setPassword(dbPassword); 
     } catch (Exception e) { 
      throw new IllegalStateException(e); 
     } 
     return mysqlDS; 
    } 
} 

ответ

2

Если у вас есть приложение для Android, подключаемое непосредственно к БД через JDBC, не рекомендуется, см. this post от Марка Мерфи по причинам. Это технически возможно, но вы должны взломать, это не стоит того, вы должны инвестировать эти усилия в правильное выполнение, взаимодействуя с веб-сервисом.

В идеале вы хотите, чтобы ваши вызовы базы данных были в веб-службе, у вас есть что-то на сервере приложений, и ваше приложение взаимодействует через REST для извлечения и обновления данных.

Преимущество введения REST слоя является то, что вы также можете иметь веб передний конца в дополнении к мобильному приложению, или IOS и т.д ..

0

Перейти к «ЛИЭС» папку вашего проекта, выберите и щелкните правой кнопкой мыши на вашем library.jar, выберите «Добавить в библиотеку. .. ". Выберите ОК. Очистите проект и запустите его снова.

Надеюсь, это поможет.

+0

Я забыл упомянуть, что я уже сделал это, и вариант сделать это снова уже нет. – crm

Смежные вопросы