【问题标题】:NoClassDefFoundError in lower versions of android较低版本的android中的NoClassDefFoundError
【发布时间】:2016-05-14 09:59:51
【问题描述】:

我在 android os 4.3 API 18 中运行应用程序时遇到此错误,但如果它在 os 5.1.0 API 22 上运行正常

    java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:289)
at android.view.View.performClick(View.java:4240)
at android.view.View$PerformClick.run(View.java:17721)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
at android.view.View.performClick(View.java:4240) 
at android.view.View$PerformClick.run(View.java:17721) 
at android.os.Handler.handleCallback(Handler.java:730) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5103) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.TypeNotPresentException: Type com.webakruti.soilreport.model.LoginResponse not present
at org.apache.harmony.luni.lang.reflect.ImplForType.getRawType(ImplForType.java:64)
at org.apache.harmony.luni.lang.reflect.ImplForType.getResolvedType(ImplForType.java:73)
at org.apache.harmony.luni.lang.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:61)
at org.apache.harmony.luni.lang.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:53)
at org.apache.harmony.luni.lang.reflect.ImplForType.getResolvedType(ImplForType.java:72)
at org.apache.harmony.luni.lang.reflect.Types.getType(Types.java:29)
at java.lang.Class.getGenericSuperclass(Class.java:761)
at com.google.gson.reflect.TypeToken.getSuperclassTypeParameter(TypeToken.java:82)
at com.google.gson.reflect.TypeToken.
<init>
(TypeToken.java:62)
at com.webakruti.soilreport.ui.activities.LoginActivity$2.
<init>
(LoginActivity.java:79)
at com.webakruti.soilreport.ui.activities.LoginActivity.login(LoginActivity.java:79)
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
at android.view.View.performClick(View.java:4240) 
at android.view.View$PerformClick.run(View.java:17721) 
at android.os.Handler.handleCallback(Handler.java:730) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5103) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.ClassNotFoundException: com.webakruti.soilreport.model.LoginResponse
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:204)
at org.apache.harmony.luni.lang.reflect.ImplForType.getRawType(ImplForType.java:62)
at org.apache.harmony.luni.lang.reflect.ImplForType.getResolvedType(ImplForType.java:73) 
at org.apache.harmony.luni.lang.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:61) 
at org.apache.harmony.luni.lang.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:53) 
at org.apache.harmony.luni.lang.reflect.ImplForType.getResolvedType(ImplForType.java:72) 
at org.apache.harmony.luni.lang.reflect.Types.getType(Types.java:29) 
at java.lang.Class.getGenericSuperclass(Class.java:761) 
at com.google.gson.reflect.TypeToken.getSuperclassTypeParameter(TypeToken.java:82) 
at com.google.gson.reflect.TypeToken.
<init>
(TypeToken.java:62) 
at com.webakruti.soilreport.ui.activities.LoginActivity$2.
<init>
(LoginActivity.java:79) 
at com.webakruti.soilreport.ui.activities.LoginActivity.login(LoginActivity.java:79) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
at android.view.View.performClick(View.java:4240) 
at android.view.View$PerformClick.run(View.java:17721) 
at android.os.Handler.handleCallback(Handler.java:730) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5103) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NoClassDefFoundError: com/webakruti/soilreport/model/LoginResponse
at java.lang.Class.classForName(Native Method) 
at java.lang.Class.forName(Class.java:204) 
at org.apache.harmony.luni.lang.reflect.ImplForType.getRawType(ImplForType.java:62) 
at org.apache.harmony.luni.lang.reflect.ImplForType.getResolvedType(ImplForType.java:73) 
at org.apache.harmony.luni.lang.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:61) 
at org.apache.harmony.luni.lang.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:53) 
at org.apache.harmony.luni.lang.reflect.ImplForType.getResolvedType(ImplForType.java:72) 
at org.apache.harmony.luni.lang.reflect.Types.getType(Types.java:29) 
at java.lang.Class.getGenericSuperclass(Class.java:761) 
at com.google.gson.reflect.TypeToken.getSuperclassTypeParameter(TypeToken.java:82) 
at com.google.gson.reflect.TypeToken.
<init>
(TypeToken.java:62) 
at com.webakruti.soilreport.ui.activities.LoginActivity$2.
<init>
(LoginActivity.java:79) 
at com.webakruti.soilreport.ui.activities.LoginActivity.login(LoginActivity.java:79) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
at android.view.View.performClick(View.java:4240) 
at android.view.View$PerformClick.run(View.java:17721) 
at android.os.Handler.handleCallback(Handler.java:730) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5103) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.webakruti.soilreport.model.LoginResponse" on path: DexPathList[[zip file "/data/app/com.webakruti.soilreport-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.webakruti.soilreport-2, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at java.lang.Class.classForName(Native Method) 
at java.lang.Class.forName(Class.java:204) 
at org.apache.harmony.luni.lang.reflect.ImplForType.getRawType(ImplForType.java:62) 
at org.apache.harmony.luni.lang.reflect.ImplForType.getResolvedType(ImplForType.java:73) 
at org.apache.harmony.luni.lang.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:61) 
at org.apache.harmony.luni.lang.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:53) 
at org.apache.harmony.luni.lang.reflect.ImplForType.getResolvedType(ImplForType.java:72) 
at org.apache.harmony.luni.lang.reflect.Types.getType(Types.java:29) 
at java.lang.Class.getGenericSuperclass(Class.java:761) 
at com.google.gson.reflect.TypeToken.getSuperclassTypeParameter(TypeToken.java:82) 
at com.google.gson.reflect.TypeToken.
<init>
(TypeToken.java:62) 
at com.webakruti.soilreport.ui.activities.LoginActivity$2.
<init>
(LoginActivity.java:79) 
at com.webakruti.soilreport.ui.activities.LoginActivity.login(LoginActivity.java:79) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
at android.view.View.performClick(View.java:4240) 
at android.view.View$PerformClick.run(View.java:17721) 
at android.os.Handler.handleCallback(Handler.java:730) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5103) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method)

java代码

   public void login(View v) {
    email = edtLogin.getText().toString();
    pwd = edtPassword.getText().toString();

    postParam = new HashMap<String, String>();
    postParam.put("username", email);
    postParam.put("password", pwd);
    postParam.put("grant_type", "password");

    JSONObject object = new JSONObject(postParam);
    Type type = new TypeToken<LoginResponse>() {
   }.getType();
    // GeneralRequest.login(LoginActivity.this, type, object, LoginActivity.this, LoginActivity.this);
    callApi(postParam);
}

XML where the method is called:
 <Button
    android:id="@+id/login"
    android:layout_width="@dimen/width_400"
    android:layout_height="wrap_content"
    android:background="@drawable/btn_background"
    android:layout_below="@+id/password"
    android:layout_centerHorizontal="true"
    android:onClick="login"
    android:text="Login"
    android:textStyle="bold"
    android:textAllCaps="false"
    android:layout_marginTop="@dimen/margin_corner"
    android:textColor="@android:color/white"
    />

GRADLE 应用程序文件-

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "24.0.0 rc2"

defaultConfig {
    applicationId "com.mycompany.soilreport"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'),      'proguard-rules.pro'
    }
}

dexOptions {
    incremental = true;
    preDexLibraries = false
    javaMaxHeapSize "4g" // 2g should be also OK
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:multidex:1.0.1'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:design:23.3.0'
compile 'com.mcxiaoke.volley:library:1.0.19'
compile 'com.google.code.gson:gson:2.4'
compile 'com.google.android.gms:play-services:8.4.0'
compile 'com.android.support:support-v4:23.3.0'
compile 'com.code-troopers.betterpickers:library:2.5.3'
compile files('libs/itextg-5.5.4.jar')
}

到目前为止我尝试过的事情:

  1. 重启安卓工作室
  2. 重新启动精灵运动
  3. 重新启动我的笔记本电脑。
  4. 再次克隆项目
  5. 检查了java版本和gradle版本
  6. 卸载apk并重新安装
  7. 检查所有变量的初始化

谁能解释一下为什么我对这个构建文件有问题?

【问题讨论】:

  • 把你的Onclick()方法代码............
  • 把代码也贴出来了,希望能帮到我
  • 主要错误是这样的:Caused by: java.lang.ClassNotFoundException: Didn't find class "com.webakruti.soilreport.model.LoginResponse" on path: DexPathList[[zip file "/data/app/com.webakruti.soilreport-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.webakruti.soilreport-2, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
  • 我猜找不到类是因为缺少一些库,我检查了是否缺少其中任何一个,没有一个丢失,还有其他原因导致我可能面临这个问题吗?
  • 分享你的 Gradle 文件和你在 libs 文件夹中的所有 jars

标签: android android-studio android-gradle-plugin noclassdeffounderror


【解决方案1】:
public class MainActivity extends Activity { 

public void login(View v) {
email = edtLogin.getText().toString();
pwd = edtPassword.getText().toString();

postParam = new HashMap<String, String>();
postParam.put("username", email);
postParam.put("password", pwd);
postParam.put("grant_type", "password");

JSONObject object = new JSONObject(postParam);
Type type = new TypeToken<LoginResponse>() {
}.getType();
// GeneralRequest.login(LoginActivity.this, type, object,  LoginActivity.this, LoginActivity.this);
callApi(postParam);
}

//activity oncreated method and other override methods

}

请注意我已经向您展示的一件事,您应该将 onclick 方法放在您的活动中,但在“@override”方法之外,因为这些是活动生成的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    相关资源
    最近更新 更多