[英]java.lang.NoClassDefFoundError exception on some devices
我在Fragment
有一個ImageView
,在其上設置了onClick Listener
。
public class TutorialFragment extends Fragment {
private TutorialAdapter tutorialAdapter;
private TutorialFragment tutorialFragment;
private SplashActivity splashActivity;
private RelativeLayout firstPageRelativeLayout,secondPageRelativeLayout,thirdPageRelativeLayout;
private ImageView backgroundImageView,facebookLoginButton,dekkohLogoImageView;
private ProgressDialogHandler progressDialogHandler;
private AlertDialogHandler alertDialogHandler;
private TextView firstPageTextView,secondPageTextView,thirdPageTextView,facebookPrivacyText,facebookDescriptionText;
@Override
public View onCreateView(LayoutInflater layoutInflater,ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(layoutInflater,container,savedInstanceState);
tutorialFragment=this;
splashActivity = (SplashActivity) getActivity();
View v = layoutInflater.inflate(R.layout.tutorial_fragment,container,false);
firstPageRelativeLayout = (RelativeLayout) v.findViewById(R.id.firstScreenRelativeLayout);
secondPageRelativeLayout = (RelativeLayout) v.findViewById(R.id.secondScreenRelativeLayout);
thirdPageRelativeLayout = (RelativeLayout) v.findViewById(R.id.thirdScreenRelativeLayout);
backgroundImageView = (ImageView) v.findViewById(R.id.tutorialImageView);
facebookLoginButton = (ImageView) v.findViewById(R.id.facebook_login_button);
dekkohLogoImageView = (ImageView) v.findViewById(R.id.dekkohLogoImage);
firstPageTextView = (TextView) v.findViewById(R.id.firstPageTextView);
secondPageTextView = (TextView) v.findViewById(R.id.secondPageTextView);
thirdPageTextView = (TextView) v.findViewById(R.id.thirdPageTextView);
facebookPrivacyText = (TextView) v.findViewById(R.id.facebookPrivacyText);
facebookDescriptionText = (TextView) v.findViewById(R.id.facebookDescriptionText);
int currentIndex = (int) this.getArguments().getSerializable("tutorial");
switch (currentIndex){
case 0:
firstPageRelativeLayout.setVisibility(View.VISIBLE);
secondPageRelativeLayout.setVisibility(View.GONE);
thirdPageRelativeLayout.setVisibility(View.GONE);
Picasso.with(splashActivity).load(R.drawable.tutorial_1).priority(Picasso.Priority.HIGH).fit().into(backgroundImageView);
Picasso.with(splashActivity).load(R.drawable.dekkoh_logo_tutorial).priority(Picasso.Priority.HIGH).fit().into(dekkohLogoImageView);
break;
case 1:
firstPageRelativeLayout.setVisibility(View.GONE);
secondPageRelativeLayout.setVisibility(View.VISIBLE);
thirdPageRelativeLayout.setVisibility(View.GONE);
Picasso.with(splashActivity).load(R.drawable.tutorial_2).priority(Picasso.Priority.HIGH).fit().into(backgroundImageView);
break;
case 2:
firstPageRelativeLayout.setVisibility(View.GONE);
secondPageRelativeLayout.setVisibility(View.GONE);
thirdPageRelativeLayout.setVisibility(View.VISIBLE);
Picasso.with(splashActivity).load(R.drawable.tutorial_3).priority(Picasso.Priority.HIGH).fit().into(backgroundImageView);
Picasso.with(splashActivity).load(R.drawable.fb_login_btn).fit().into(facebookLoginButton);
break;
}
final ArrayList<String> permissions = new ArrayList<String>();
progressDialogHandler = ProgressDialogHandler.getInstance();
alertDialogHandler = AlertDialogHandler.getInstance();
facebookLoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// setting facebook permission
permissions.add("email");
// permissions.add("user_location");
permissions.add("user_friends");
progressDialogHandler.showCustomProgressDialog(splashActivity);
final JSONObject jb = new JSONObject();
Session.openActiveSession(splashActivity, true,
permissions, new Session.StatusCallback() {
@SuppressWarnings("deprecation")
@Override
public void call(final Session session,
SessionState state, Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(
session,
new Request.GraphUserCallback() {
@Override
public void onCompleted(
GraphUser user,
Response response) {
if (user != null) {
String emaila = user
.asMap()
.get("email")
.toString();
String userId = user
.getId();
String name1 = user
.getName();
try {
jb.put("provider",
"Facebook");
jb.put("user_id",
userId.toString());
String token = session
.getAccessToken()
.toString();
jb.put("token",
token);
Log.d("f b login ",
jb.toString());
// clear seesion
// details and
// close
session.closeAndClearTokenInformation();
new LoginTheUser(
token,
user.getId())
.execute();
} catch (JSONException e) {
// Toast.makeText(getApplicationContext(),
// e.getLocalizedMessage(),
// Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
} else {
progressDialogHandler
.dismissCustomProgressDialog(splashActivity);
alertDialogHandler
.showToast(
splashActivity,
"Facebook Login Failed!");
}
}
});
} else {
}
}
});
}
});
Typeface typeface = Typeface.createFromAsset(getActivity().getAssets(),"fonts/SortsMillGoudy-Regular.ttf");
firstPageTextView.setTypeface(typeface);
secondPageTextView.setTypeface(typeface);
thirdPageTextView.setTypeface(typeface);
facebookDescriptionText.setTypeface(typeface);
facebookPrivacyText.setTypeface(typeface);
return v;
}
在Nexus,oneplus上運行正常,但在某些設備上出現以下錯誤。
java.lang.NoClassDefFoundError: com.myapp.fragments.TutorialFragment$1
at com.myapp.fragments.TutorialFragment.onCreateView(TutorialFragment.java:135)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486)
at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16497)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
at android.view.View.measure(View.java:16497)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
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)
$ 1表示內部類,即onclicklistener
。 如果我注釋掉onclicklistener
代碼,則Activity和Fragment
啟動。 為什么是這樣? 有什么問題
您的應用似乎達到了65K方法的限制,這是Android相當著名的限制。
參考: https : //developer.android.com/tools/building/multidex.html#dev-build
您可以按照上面鏈接中的解決方案進行操作。 或簡而言之:
如果您有Application類(擴展了Application類),則在該類中重寫attachBaseContext()並調用Multidex.install(this)
否則,將其添加到清單中:
android:name="android.support.multidex.MultiDexApplication"
在<application>
標簽中。
如果可以解決您的問題,請在這里答復。 它實際上解決了我的問題。
我在運行Samsung Android 8.0設備時遇到了此問題,但是在Samsung Android 9上卻沒有問題。啟用multidex和擴展multidex應用程序無濟於事。
唯一解決此問題的方法是將Gradle工具的版本從3.5.1降低到3.4.1(com.android.tools.build:gradle:3.4.1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.