java.lang.NoClassDefFoundError retrofit2.Utils

Ich bin mit der Nachrüstung zu handhaben Serverside Daten aus Mobile. Nach der Umsetzung retrofit, ich erhalte die unten Ausnahme.

Was mache ich falsch?

com.name.App_idea W/System.Fehler: java.lang.NoClassDefFoundError:
retrofit2.Utils
bei retrofit2.Retrofit - $ - Generator.baseUrl ("Retrofit".java:434)
bei com.name.App_idea.utils.Idee.onCreate(Idee.java:103)
an android.app.Instrumentierung.callApplicationOnCreate(Instrumentation.java:1007)
an android.app.ActivityThread.handleBindApplication(ActivityThread.java:4541)
an android.app.ActivityThread.Zugriff auf$1500(ActivityThread.java:151)
an android.app.ActivityThread$H. handleMessage(ActivityThread.java:1381)
an android.os.Handler.dispatchMessage(Handler.java:110)
an android.os.Looper.Loops(Looper.java:193)
an android.app.ActivityThread.main(ActivityThread.java:5292)
bei java.lang.reflektieren.Methode.invokeNative(Native-Methode)
bei java.lang.reflektieren.Methode.invoke(Method.java:515)
bei com.android.intern.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
bei com.android.intern.os.ZygoteInit.main(ZygoteInit.java:640)
bei dalvik.system.NativeStart.main(Native-Methode)

Retrofit Init

mRetrofit = new Retrofit.Builder()
                    .baseUrl(AppConstance.APP_URL)
                    .addConverterFactory(ScalarsConverterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(getOkHttpClient())
                    .build();

Gradle-Datei

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.3'

    defaultConfig {
        applicationId "com.name.App_idea"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "9"
        multiDexEnabled true


    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    compile 'com.squareup.retrofit2:converter-scalars:2.0.0'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0'
    compile 'com.jakewharton:butterknife:7.0.1'
    compile 'com.android.support:design:23.3.0'
    compile 'com.android.support:cardview-v7:23.3.0'
    compile 'com.google.android.gms:play-services:8.4.0'
    compile 'com.squareup.okhttp3:okhttp:3.2.0'
    compile 'com.squareup.okhttp3:okhttp-urlconnection:3.2.0'
    compile 'com.android.support:support-v4:23.3.0'
}

Application-Klasse

import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Environment;
import android.support.multidex.MultiDex;
import android.util.Log;

import java.io.File;
import java.security.cert.CertificateException;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.scalars.ScalarsConverterFactory;
import retrofit2.converter.gson.GsonConverterFactory;


public class Idea extends Application {
    public static Retrofit mRetrofit;
    public static IdeaService Iservice;


    public static LoginResponceModel loinResponce;
    public static SettingsModel settingModel;

    public static LocationModel location = new LocationModel();

    private static SQLiteDatabase dbase;
    private static String FILE_PATH;

    public static SQLiteDatabase getDataBase() {
        return dbase;
    }

    public static String getFilePath() {
        return FILE_PATH;
    }

    private static class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {
            super(context, "App", null, 1);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(AppConstance.DbConstans.tblLogin);
            Log.i("DB", "Created");
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            onCreate(db);
        }
    }

    public static void deleteAllTables() {
        getDataBase().execSQL("DELETE FROM login");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        try {
            mRetrofit = new Retrofit.Builder()
                    .baseUrl(AppConstance.APP_URL)
                    .addConverterFactory(ScalarsConverterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(getOkHttpClient())
                    .build();
            Iservice = mRetrofit.create(IdeaService.class);
            MultiDex.install(this);
            DatabaseHelper dbHelper = new DatabaseHelper(this);
            dbase = dbHelper.getWritableDatabase();

            AppDataService appDataService = new AppDataService();
            loinResponce = appDataService.getLoginDetails();
            settingModel = appDataService.getSettings();

            FILE_PATH = getAppFilePath();
            startService(new Intent(Idea.this, LocationTracker.class));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String combineFilePath(String path1, String path2) {
        File file1 = new File(path1);
        File file2 = new File(file1, path2);
        return file2.getPath();
    }

    public String getAppFilePath() {

        String dsPath;
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED))
            dsPath = combineFilePath(Environment
                            .getExternalStorageDirectory().getAbsolutePath(),
                    "android/data/Idea/");
        else
            dsPath = this.getDir(
                    this.getPackageName(), 0).getAbsolutePath();

        new File(dsPath).mkdirs();
        return dsPath;
    }

    private OkHttpClient getOkHttpClient() {
        try {
            //Create a trust manager that does not validate certificate chains
            final TrustManager[] trustAllCerts = new TrustManager[]{
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                        }

                        @Override
                        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                        }

                        @Override
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return new java.security.cert.X509Certificate[]{};
                        }
                    }
            };
            //Install the all-trusting trust manager
            final SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
            //Create an ssl socket factory with our all-trusting manager
            final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
            OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.sslSocketFactory(sslSocketFactory);
            builder.hostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            });

            OkHttpClient okHttpClient = builder.build();
            return okHttpClient;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}
  • Bitte fügen Sie Ihre URL richtig in der Utils-Klasse, und verwenden Sie die verketteten Teil in der interfce wie ich habe in mein code.@Muthu Pandiyan
  • Sind Sie mit proguard?
  • keine iam nicht mit
  • Bitte versuchen Sie es zu entfernen .client(getOkHttpClient()) line
  • immer noch dasselbe Problem mRetrofit = new Nachrüsten.Generator() .baseUrl(AppConstance.APP_URL) .build();
  • Ok, versuchen Sie ein neues Projekt erstellen, nur mit Inhalt wie in deiner Frage, dann führen Sie die Anwendung.
  • NoClassDefFoundError bedeutet, dass die Klasse vorhanden war, zur compile-Zeit, aber konnte nicht gefunden werden zur Laufzeit durch die JVM. Beobachtet man dieses Verhalten in einer Application-Klasse enthält nur die retrofit-code? Ich denke, ein Duplikat der Klasse aufgerufen DatabaseHelper definiert werden könnten, eine Ihrer Abhängigkeiten.
  • Haben Sie versucht, multidex, wie ich vorgeschlagen, in einer meiner Antwort?

Schreibe einen Kommentar