[英]java.lang.NoClassDefFoundError with AsyncHttpClient - API 19
关于这一点,有很多主题,但是没有一个起作用:/
我正在运行android studio,我在gradle中添加了这个librarie,然后在gradle中清理 , 构建了项目并运行app 。
不幸的是,每次我运行该应用程序都会失败
Process: com.example.gta.fab1, PID: 5775
java.lang.NoClassDefFoundError: com.loopj.android.http.AsyncHttpClient
at com.example.gta.fab1.TabFragments.WhoFragment.uploadToServer(WhoFragment.java:129)
at com.example.gta.fab1.TabFragments.WhoFragment.access$100(WhoFragment.java:41)
at com.example.gta.fab1.TabFragments.WhoFragment$1.onClick(WhoFragment.java:85)
at com.facebook.FacebookButtonBase.callExternalOnClickListener(FacebookButtonBase.java:216)
at com.facebook.share.widget.ShareButtonBase.access$000(ShareButtonBase.java:39)
at com.facebook.share.widget.ShareButtonBase$1.onClick(ShareButtonBase.java:167)
at com.facebook.FacebookButtonBase$1.onClick(FacebookButtonBase.java:385)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
我的gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.example.gta.fab1"
multiDexEnabled true
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:design:23.2.1'
compile 'com.google.android.gms:play-services:8.4.0'
compile 'com.facebook.android:facebook-android-sdk:[4,5)'
compile 'com.loopj.android:android-async-http:1.4.9'
}
我的课:
package com.example.gta.fab1.TabFragments;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.loopj.android.http.*;
import org.json.JSONObject;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
import cz.msebera.android.httpclient.entity.StringEntity;
import cz.msebera.android.httpclient.message.BasicHeader;
import cz.msebera.android.httpclient.protocol.HTTP;
import cz.msebera.android.httpclient.Header;
public class WhoFragment extends Fragment {
CallbackManager callbackManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final RelativeLayout mRelativeLayout = (RelativeLayout) inflater.inflate(
R.layout.who_fragment, container, false);
JSONObject post_json = jSonBuilder(facebook_id, activity);
try{
uploadToServer(post_json);
Log.d("output", post_json.toString(2));
} catch(java.io.IOException | org.json.JSONException e){
throw new RuntimeException(e);
}
return mRelativeLayout;
}
private JSONObject jSonBuilder(String fb_id,FragmentMain activity ){
JSONObject parent = new JSONObject();
try{
parent.put("user_fb_id",fb_id);
parent.put("locations", activity.serialize.getArrayOfRestaurants());
parent.put("time_propositions", activity.serialize.getArrayOfTimeSchedule());
return parent;
}catch(org.json.JSONException e){
throw new RuntimeException(e);
}
}
private void uploadToServer(JSONObject post_json) throws IOException, org.json.JSONException {
AsyncHttpClient client = new AsyncHttpClient();
String url = "http://myurl/api/postjson/1";
StringEntity se = null;
try {
se = new StringEntity(post_json.toString());
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
client.post(null, url, se, "application/json", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, cz.msebera.android.httpclient.Header[] headers, byte[] responseBody) {
System.out.print("success");
}
@Override
public void onFailure(int statusCode, cz.msebera.android.httpclient.Header[] headers, byte[] responseBody, Throwable error) {
System.out.print("fail");
}
});
}
}
一些答案是关于手动添加jar库并在gradle.build中引用它,但在插件的网站上也没有用,文档很清楚:
https://guides.codepath.com/android/Using-Android-Async-Http-Client
我在这里没有看到我的错误:/
在此先多谢
编辑:然后将jar文件导入libs文件夹,添加到库,然后在gradle中手动导入标头的libs:
compile 'cz.msebera.android:httpclient:4.3.+'
给出不同的错误:
java.lang.NoClassDefFoundError: com.loopj.android.http.LogHandler
必须有一个错误:(我没有其他选择
编辑2:在API 21上工作正常...,此库是否与API 19不兼容?
启用multidex
defaultConfig { ... // Enabling multidex support. multiDexEnabled true }
添加依赖
dependencies { compile 'com.android.support:multidex:1.0.1' }
在您的应用程序中添加代码
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
这对我有用,我希望它对您有所帮助。
它可能与multiDex功能有关。
您可以通过删除gradle文件中的“ multiDexEnabled true”行来禁用它。
或遵循multidex指南 :
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.