Gradle sync : No error Rebuild Project : No error After hitting RUN >> Installing app through ADB but unable to launch application. Forced stopped
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.bookcircuit"
minSdkVersion 22
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
useLibrary 'org.apache.http.legacy'
manifestPlaceholders = [onesignal_app_id : "5c3d7b9b-1874-463f-8081-1c3439ccb3ea",
onesignal_google_project_number: "REMOTE"]
multiDexEnabled true
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Logcat:
2019-05-26 01:29:47.773 29431-29431/com.example.bookcircuit E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.bookcircuit, PID: 29431
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bookcircuit/com.example.bookcircuit.SplashActivity}: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class androidx.constraintlayout.ConstraintLayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2928)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3063)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1823)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:198)
at android.app.ActivityThread.main(ActivityThread.java:6729)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class androidx.constraintlayout.ConstraintLayout
Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class androidx.constraintlayout.ConstraintLayout
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.constraintlayout.ConstraintLayout" on path: DexPathList[[zip file "/data/app/com.example.bookcircuit-UeVp2v3GMHxcnEsLL2108Q==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.bookcircuit-UeVp2v3GMHxcnEsLL2108Q==/lib/arm64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.view.LayoutInflater.createView(LayoutInflater.java:606)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:431)
at android.app.Activity.setContentView(Activity.java:2771)
at com.example.bookcircuit.SplashActivity.onCreate(SplashActivity.java:25)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3063)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1823)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:198)
at android.app.ActivityThread.main(ActivityThread.java:6729)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
AndroidManifest.xml :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.bookcircuit">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
tools:node="replace"
android:name=".init.CustomApplication"
android:allowBackup="true"
android:icon="@mipmap/logo"
android:label="@string/app_name"
android:roundIcon="@mipmap/logo"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<meta-data
android:name="AA_DB_NAME"
android:value="MyDatabase.db" />
<meta-data
android:name="AA_DB_VERSION"
android:value="5" />
<meta-data
android:name="AA_MODELS"
android:value="com.example.bookcircuit.db.Notification" />
<!--
Add the following to your AndroidManifest.xml to prevent the launching of your main Activity
if you are calling startActivity above.
-->
<meta-data
android:name="com.onesignal.NotificationOpened.DEFAULT"
android:value="DISABLE" />
<activity android:name=".SplashActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Register"
android:theme="@style/Theme.AppCompat.NoActionBar"
android:windowSoftInputMode="stateHidden" />
<activity
android:name=".MainActivity"
android:theme="@style/WhiteTheme" />
<activity
android:name=".LoginActivity"
android:theme="@style/Theme.AppCompat.NoActionBar"
android:windowSoftInputMode="stateHidden" />
<activity
android:name=".HelpCenter"
android:theme="@style/WhiteTheme" />
<activity
android:name=".Profile"
android:theme="@style/WhiteTheme" />
<activity
android:name=".Cart"
android:theme="@style/WhiteTheme" />
<activity
android:name=".UpdateData"
android:theme="@style/WhiteTheme"
android:windowSoftInputMode="stateHidden" />
<activity
android:name=".ForgotPassword"
android:theme="@style/Theme.AppCompat.NoActionBar"
android:windowSoftInputMode="stateHidden" />
<activity
android:name=".NotificationActivity"
android:theme="@style/WhiteTheme" />
<activity
android:name=".prodcutscategory.Cards"
android:theme="@style/WhiteTheme" />
<activity
android:name=".IndividualProduct"
android:theme="@style/WhiteTheme" />
<activity
android:name=".Wishlist"
android:theme="@style/WhiteTheme" />
<activity
android:name=".OrderDetails"
android:theme="@style/WhiteTheme" />
<activity
android:name=".OrderPlaced"
android:theme="@style/WhiteTheme" />
<activity
android:name=".prodcutscategory.Tshirts"
android:theme="@style/WhiteTheme" />
<activity
android:name=".prodcutscategory.Bags"
android:theme="@style/WhiteTheme" />
<activity
android:name=".prodcutscategory.Calendars"
android:theme="@style/WhiteTheme" />
<activity
android:name=".prodcutscategory.Keychains"
android:theme="@style/WhiteTheme" />
<activity
android:name=".prodcutscategory.Stationary"
android:theme="@style/WhiteTheme" />
<activity android:name=".WelcomeActivity"
android:theme="@style/AppTheme.NoActionBar"/>
</application>
MainActivity :
public class MainActivity extends AppCompatActivity {
private SliderLayout sliderShow;
private Drawer result;
private CrossfadeDrawerLayout crossfadeDrawerLayout = null;
//to get user session data
private UserSession session;
private HashMap<String, String> user;
private String name, email, photo, mobile;
private String first_time;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Typeface typeface = ResourcesCompat.getFont(this, R.font.blacklist);
TextView appname = findViewById(R.id.appname);
appname.setTypeface(typeface);
//check Internet Connection
new CheckInternetConnection(this).checkConnection();
//retrieve session values and display on listviews
getValues();
//Navigation Drawer with toolbar
inflateNavDrawer();
//ImageSLider
inflateImageSlider();
if (session.getFirstTime()) {
//tap target view
tapview();
session.setFirstTime(false);
}
}
private void tapview() {
new TapTargetSequence(this)
.targets(
TapTarget.forView(findViewById(R.id.notifintro), "Notifications", "Latest offers will be available here !")
.targetCircleColor(R.color.colorAccent)
.titleTextColor(R.color.colorAccent)
.titleTextSize(25)
.descriptionTextSize(15)
.descriptionTextColor(R.color.accent)
.drawShadow(true) // Whether to draw a drop shadow or not
.cancelable(false) // Whether tapping outside the outer circle dismisses the view
.tintTarget(true)
.transparentTarget(true)
.outerCircleColor(R.color.first),
TapTarget.forView(findViewById(R.id.view_profile), "Profile", "You can view and edit your profile here !")
.targetCircleColor(R.color.colorAccent)
.titleTextColor(R.color.colorAccent)
.titleTextSize(25)
.descriptionTextSize(15)
.descriptionTextColor(R.color.accent)
.drawShadow(true) // Whether to draw a drop shadow or not
.cancelable(false) // Whether tapping outside the outer circle dismisses the view
.tintTarget(true)
.transparentTarget(true)
.outerCircleColor(R.color.third),
TapTarget.forView(findViewById(R.id.cart), "Your Cart", "Here is Shortcut to your cart !")
.targetCircleColor(R.color.colorAccent)
.titleTextColor(R.color.colorAccent)
.titleTextSize(25)
.descriptionTextSize(15)
.descriptionTextColor(R.color.accent)
.drawShadow(true)
.cancelable(false)// Whether tapping outside the outer circle dismisses the view
.tintTarget(true)
.transparentTarget(true)
.outerCircleColor(R.color.second),
TapTarget.forView(findViewById(R.id.visitingcards), "Categories", "Product Categories have been listed here !")
.targetCircleColor(R.color.colorAccent)
.titleTextColor(R.color.colorAccent)
.titleTextSize(25)
.descriptionTextSize(15)
.descriptionTextColor(R.color.accent)
.drawShadow(true)
.cancelable(false)// Whether tapping outside the outer circle dismisses the view
.tintTarget(true)
.transparentTarget(true)
.outerCircleColor(R.color.fourth))
.listener(new TapTargetSequence.Listener() {
// This listener will tell us when interesting(tm) events happen in regards
// to the sequence
@Override
public void onSequenceFinish() {
session.setFirstTime(false);
Toasty.success(MainActivity.this, " You are ready to go !", Toast.LENGTH_SHORT).show();
}
@Override
public void onSequenceStep(TapTarget lastTarget, boolean targetClicked) {
}
@Override
public void onSequenceCanceled(TapTarget lastTarget) {
// Boo
}
}).start();
}
private void getValues() {
//create new session object by passing application context
session = new UserSession(getApplicationContext());
//validating session
session.isLoggedIn();
//get User details if logged in
user = session.getUserDetails();
name = user.get(UserSession.KEY_NAME);
email = user.get(UserSession.KEY_EMAIL);
mobile = user.get(UserSession.KEY_MOBiLE);
photo = user.get(UserSession.KEY_PHOTO);
}
private void inflateImageSlider() {
// Using Image Slider -----------------------------------------------------------------------
sliderShow = findViewById(R.id.slider);
//populating Image slider
ArrayList<String> sliderImages = new ArrayList<>();
sliderImages.add("https://www.printstop.co.in/images/flashgallary/large/Business_stationery_home_banner.jpg");
sliderImages.add("https://www.printstop.co.in/images/flashgallary/large/calendar-diaries-home-banner.jpg");
sliderImages.add("https://www.printstop.co.in/images/flashgallary/large/calendar-diaries-banner.jpg");
sliderImages.add("https://www.printstop.co.in/images/flashgallary/large/free-visiting-cards-home-banner.JPG");
for (String s : sliderImages) {
DefaultSliderView sliderView = new DefaultSliderView(this);
sliderView.image(s);
sliderShow.addSlider(sliderView);
}
sliderShow.setPresetIndicator(SliderLayout.PresetIndicators.Right_Bottom);
}
private void inflateNavDrawer() {
//set Custom toolbar to activity -----------------------------------------------------------
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Create the AccountHeader ----------------------------------------------------------------
//Profile Making
IProfile profile = new ProfileDrawerItem()
.withName(name)
.withEmail(email)
.withIcon(photo);
AccountHeader headerResult = new AccountHeaderBuilder()
.withActivity(this)
.withHeaderBackground(R.drawable.gradient_background)
.addProfiles(profile)
.withCompactStyle(true)
.build();
//Adding nav drawer items ------------------------------------------------------------------
PrimaryDrawerItem item1 = new PrimaryDrawerItem().withIdentifier(1).withName(R.string.home).withIcon(R.drawable.home);
PrimaryDrawerItem item2 = new PrimaryDrawerItem().withIdentifier(2).withName(R.string.myprofile).withIcon(R.drawable.profile);
PrimaryDrawerItem item3 = new PrimaryDrawerItem().withIdentifier(3).withName(R.string.wishlist).withIcon(R.drawable.wishlist);
PrimaryDrawerItem item4 = new PrimaryDrawerItem().withIdentifier(4).withName(R.string.cart).withIcon(R.drawable.cart);
PrimaryDrawerItem item5 = new PrimaryDrawerItem().withIdentifier(5).withName(R.string.logout).withIcon(R.drawable.logout);
SecondaryDrawerItem item7 = new SecondaryDrawerItem().withIdentifier(7).withName("Offers").withIcon(R.drawable.tag);
SecondaryDrawerItem item8 = new SecondaryDrawerItem().withIdentifier(8).withName(R.string.aboutapp).withIcon(R.drawable.credits);
SecondaryDrawerItem item9 = new SecondaryDrawerItem().withIdentifier(9).withName(R.string.feedback).withIcon(R.drawable.feedback);
SecondaryDrawerItem item10 = new SecondaryDrawerItem().withIdentifier(10).withName(R.string.helpcentre).withIcon(R.drawable.helpccenter);
SecondaryDrawerItem item12 = new SecondaryDrawerItem().withIdentifier(12).withName("App Tour").withIcon(R.drawable.tour);
SecondaryDrawerItem item13 = new SecondaryDrawerItem().withIdentifier(13).withName("Explore").withIcon(R.drawable.explore);
//creating navbar and adding to the toolbar ------------------------------------------------
result = new DrawerBuilder()
.withActivity(this)
.withToolbar(toolbar)
.withHasStableIds(true)
.withDrawerLayout(R.layout.crossfade_drawer)
.withAccountHeader(headerResult)
.withDrawerWidthDp(72)
.withGenerateMiniDrawer(true)
.withTranslucentStatusBar(true)
.withActionBarDrawerToggleAnimated(true)
.addDrawerItems(
item1, item2, item3, item4, item5, new DividerDrawerItem(), item7, item8, item9, item10,new DividerDrawerItem(),item12,item13
)
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
switch (position) {
case 1:
if (result != null && result.isDrawerOpen()) {
result.closeDrawer();
}
break;
case 2:
startActivity(new Intent(MainActivity.this, Profile.class));
break;
case 3:
startActivity(new Intent(MainActivity.this, Wishlist.class));
break;
case 4:
startActivity(new Intent(MainActivity.this, Cart.class));
break;
case 5:
session.logoutUser();
finish();
break;
case 7:
startActivity(new Intent(MainActivity.this, NotificationActivity.class));
break;
case 8:
new LibsBuilder()
.withFields(R.string.class.getFields())
.withActivityTitle(getString(R.string.about_activity_title))
.withAboutIconShown(true)
.withAboutAppName(getString(R.string.app_name))
.withAboutVersionShown(true)
.withLicenseShown(true)
.withAboutSpecial1(getString(R.string.domain))
.withAboutSpecial1Description(getString(R.string.website))
.withAboutSpecial2(getString(R.string.licence))
.withAboutSpecial2Description(getString(R.string.licencedesc))
.withAboutSpecial3(getString(R.string.changelog))
.withAboutSpecial3Description(getString(R.string.changes))
.withShowLoadingProgress(true)
.withAboutDescription(getString(R.string.about_activity_description))
.withActivityStyle(Libs.ActivityStyle.LIGHT_DARK_TOOLBAR)
.start(MainActivity.this);
break;
case 9:
new EasyFeedback.Builder(MainActivity.this)
.withEmail("beingdevofficial@gmail.com")
.withSystemInfo()
.build()
.start();
break;
case 10:
startActivity(new Intent(MainActivity.this, HelpCenter.class));
break;
case 12:
session.setFirstTimeLaunch(true);
startActivity(new Intent(MainActivity.this, WelcomeActivity.class));
finish();
break;
case 13:
if (result != null && result.isDrawerOpen()) {
result.closeDrawer();
}
tapview();
break;
default:
Toast.makeText(MainActivity.this, "Default", Toast.LENGTH_LONG).show();
}
return true;
}
})
.build();
//Setting crossfader drawer------------------------------------------------------------
crossfadeDrawerLayout = (CrossfadeDrawerLayout) result.getDrawerLayout();
//define maxDrawerWidth
crossfadeDrawerLayout.setMaxWidthPx(DrawerUIUtils.getOptimalDrawerWidth(this));
//add second view (which is the miniDrawer)
final MiniDrawer miniResult = result.getMiniDrawer();
//build the view for the MiniDrawer
View view = miniResult.build(this);
//set the background of the MiniDrawer as this would be transparent
view.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(this, com.mikepenz.materialdrawer.R.attr.material_drawer_background, com.mikepenz.materialdrawer.R.color.material_drawer_background));
//we do not have the MiniDrawer view during CrossfadeDrawerLayout creation so we will add it here
crossfadeDrawerLayout.getSmallView().addView(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
//define the crossfader to be used with the miniDrawer. This is required to be able to automatically toggle open / close
miniResult.withCrossFader(new ICrossfader() {
@Override
public void crossfade() {
boolean isFaded = isCrossfaded();
crossfadeDrawerLayout.crossfade(400);
//only close the drawer if we were already faded and want to close it now
if (isFaded) {
result.getDrawerLayout().closeDrawer(GravityCompat.START);
}
}
@Override
public boolean isCrossfaded() {
return crossfadeDrawerLayout.isCrossfaded();
}
});
}
@Override
protected void onStop() {
sliderShow.stopAutoCycle();
super.onStop();
}
@Override
public void onBackPressed() {
if (result != null && result.isDrawerOpen()) {
result.closeDrawer();
} else {
super.onBackPressed();
}
}
public void viewProfile(View view) {
startActivity(new Intent(MainActivity.this, Profile.class));
}
public void viewCart(View view) {
startActivity(new Intent(MainActivity.this, Cart.class));
}
@Override
protected void onResume() {
//check Internet Connection
new CheckInternetConnection(this).checkConnection();
sliderShow.startAutoCycle();
super.onResume();
}
public void Notifications(View view) {
startActivity(new Intent(MainActivity.this, NotificationActivity.class));
}
public void cardsActivity(View view) {
startActivity(new Intent(MainActivity.this, Cards.class));
}
public void tshirtActivity(View view) {
startActivity(new Intent(MainActivity.this, Tshirts.class));
}
public void bagsActivity(View view) {
startActivity(new Intent(MainActivity.this, Bags.class));
}
public void stationaryAcitivity(View view) {
startActivity(new Intent(MainActivity.this, Stationary.class));
}
public void calendarsActivity(View view) {
startActivity(new Intent(MainActivity.this, Calendars.class));
}
public void keychainsActivity(View view) {
startActivity(new Intent(MainActivity.this, Keychains.class));
}
}
答案 0 :(得分:0)
只需添加您的应用程序(表示Module:app的)级别build.gradle
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
在您记录数据时,我们可以清楚地看到
"Caused by: android.view.InflateException: Binary XML file line #2: Binary
XML file line #2: Error inflating class
androidx.constraintlayout.ConstraintLayout"
实现约束布局库后,只需同步并清理您的项目即可。