gpt4 book ai didi

java - androidx java.lang.ClassNotFoundException : and android. view.InflateException: 同时

转载 作者:搜寻专家 更新时间:2023-11-01 09:19:11 24 4
gpt4 key购买 nike

迁移到 Androidx 库后,我在 Google Play Dev Console 中收到此错误。

来自 Google Play 的崩溃报告:

java.lang.RuntimeException: 
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3322)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3418)
at android.app.ActivityThread.handleRelaunchActivity (ActivityThread.java:5481)
at android.app.ActivityThread.access$1200 (ActivityThread.java:231)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1829)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:148)
at android.app.ActivityThread.main (ActivityThread.java:7422)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)
Caused by: android.view.InflateException:
at android.view.LayoutInflater.inflate (LayoutInflater.java:551)
at android.view.LayoutInflater.inflate (LayoutInflater.java:429)
at android.view.LayoutInflater.inflate (LayoutInflater.java:380)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView (AppCompatDelegateImpl.java:469)
at androidx.appcompat.app.AppCompatActivity.setContentView (AppCompatActivity.java:140)
at x.y.z.LoginActivity.onCreate (LoginActivity.java:24)
at android.app.Activity.performCreate (Activity.java:6904)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1136)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3269)
Caused by: android.view.InflateException:
at android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:788)
at android.view.LayoutInflater.parseInclude (LayoutInflater.java:966)
at android.view.LayoutInflater.rInflate (LayoutInflater.java:843)
at android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:810)
at android.view.LayoutInflater.rInflate (LayoutInflater.java:855)
at android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:810)
at android.view.LayoutInflater.inflate (LayoutInflater.java:527)
Caused by: java.lang.ClassNotFoundException:
at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass (ClassLoader.java:511)
at java.lang.ClassLoader.loadClass (ClassLoader.java:469)
at android.view.LayoutInflater.createView (LayoutInflater.java:595)
at android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:776)

编辑2:

layout/toolbar.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:gravity="center"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

编辑:

LoginActivity.java:

package x.y.z;

import android.content.Intent;
import android.os.Bundle;
//import androidx.core.app.Fragment;
//import androidx.core.app.FragmentManager;
//import android.support.v7.widget.Toolbar;
import android.view.MenuItem;

import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import x.y.z.common.ActivityBase;

public class LoginActivity extends ActivityBase {

Toolbar mToolbar;

Fragment fragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);

mToolbar = (Toolbar) findViewById(R.id.toolbar);

setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);

if (savedInstanceState != null) {

fragment = getSupportFragmentManager().getFragment(savedInstanceState, "currentFragment");

} else {

fragment = new LoginFragment();
}

FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.container_body, fragment).commit();
}

@Override
protected void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

getSupportFragmentManager().putFragment(outState, "currentFragment", fragment);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

fragment.onActivityResult(requestCode, resultCode, data);
}

@Override
public void onBackPressed(){

finish();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {

case android.R.id.home: {

finish();
return true;
}

default: {

return super.onOptionsItemSelected(item);
}
}
}
}

activity_login.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="x.y.z.LoginActivity" >

<LinearLayout
android:id="@+id/container_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />

</LinearLayout>

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container_body"
android:name="ru.ifsoft.network.LoginFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible" />

</LinearLayout>

MainActivity.java

//Imported libraries.    
public class MainActivity extends ActivityBase implements FragmentDrawer.FragmentDrawerListener, ImageChooseDialog.AlertPositiveListener, ProfileReportDialog.AlertPositiveListener, PopularSettingsDialog.AlertPositiveListener {

Toolbar mToolbar;

private FragmentDrawer drawerFragment;

// used to store app title
private CharSequence mTitle;

LinearLayout mContainerAdmob;

Fragment fragment;
Boolean action = false;
int page = 0;

private Boolean restore = false;
Boolean entered = false;

private AdView mAdView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);



if (savedInstanceState != null) {

//Restore the fragment's instance
fragment = getSupportFragmentManager().getFragment(savedInstanceState, "currentFragment");

restore = savedInstanceState.getBoolean("restore");
mTitle = savedInstanceState.getString("mTitle");

} else {

fragment = new StreamFragment();

restore = false;
mTitle = getString(R.string.app_name);
}

if (fragment != null) {

FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.container_body, fragment).commit();
}

mToolbar = (Toolbar) findViewById(R.id.toolbar);

setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setTitle(mTitle);

drawerFragment = (FragmentDrawer) getFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar);
drawerFragment.setDrawerListener(this);

mContainerAdmob = (LinearLayout) findViewById(R.id.container_admob);



mContainerAdmob.setVisibility(View.VISIBLE);

mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
mAdView.bringToFront();

if (!restore) {

// Show default section "Stream"

displayView(1);
}


}


/** Called when leaving the activity */
@Override
public void onPause() {
if (mAdView != null) {
mAdView.pause();
}
super.onPause();
}

/** Called when returning to the activity */
@Override
public void onResume() {
super.onResume();
if (mAdView != null) {
mAdView.resume();
}
}

/** Called before the activity is destroyed */
@Override
public void onDestroy() {
if (mAdView != null) {
mAdView.destroy();
}
super.onDestroy();
}

@Override
protected void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

outState.putBoolean("restore", true);
outState.putString("mTitle", getSupportActionBar().getTitle().toString());
getSupportFragmentManager().putFragment(outState, "currentFragment", fragment);
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

fragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == ACTION_LOGIN && resultCode == RESULT_OK && null != data) {

String pageId = data.getStringExtra("pageId");

switch (pageId) {

case "favorites": {

displayView(5);

break;
}

case "notifications": {

displayView(6);

break;
}

case "profile": {

displayView(7);

break;
}


case "settings": {


Intent i = new Intent(MainActivity.this, SettingsActivity.class);
startActivity(i);

break;
}

default: {

break;
}
}
}
}

@Override
public void onChangePopularCategory(int position) {

PopularFragment p = (PopularFragment) fragment;
p.onChangeCategory(position);
}

@Override
public void onImageFromGallery() {

ProfileFragment p = (ProfileFragment) fragment;
p.imageFromGallery();
}

@Override
public void onImageFromCamera() {

ProfileFragment p = (ProfileFragment) fragment;
p.imageFromCamera();
}

@Override
public void onProfileReport(int position) {

ProfileFragment p = (ProfileFragment) fragment;
p.onProfileReport(position);
}


@Override
public void onDrawerItemSelected(View view, int position) {

displayView(position);
}

private void displayView(int position) {

action = false;

switch (position) {

case 0: {

break;
}

case 1: {

page = 1;

fragment = new StreamFragment();
getSupportActionBar().setTitle(R.string.page_1);

action = true;

break;
}

case 2: {

page = 2;

fragment = new CategoriesFragment();
getSupportActionBar().setTitle(R.string.page_2);

action = true;

break;
}


case 3: {

page = 3;

fragment = new SearchFragment();
getSupportActionBar().setTitle("");

action = true;

break;
}

case 4: {

page = 4;

fragment = new PopularFragment();
getSupportActionBar().setTitle(R.string.page_4);

action = true;

break;
}

case 5: {

if (App.getInstance().getId() != 0){

page = 5;

fragment = new FavoritesFragment();
getSupportActionBar().setTitle(R.string.page_5);

action = true;

} else {

Intent i = new Intent(MainActivity.this, LoginActivity.class);
i.putExtra("pageId", "favorites");
startActivityForResult(i, ACTION_LOGIN);
}

break;
}


case 6: {

if (App.getInstance().getId() != 0){

page = 6;

fragment = new NotificationsFragment();
getSupportActionBar().setTitle(R.string.page_6);

action = true;

} else {

Intent i = new Intent(MainActivity.this, LoginActivity.class);
i.putExtra("pageId", "notifications");
startActivityForResult(i, ACTION_LOGIN);
}

break;
}


case 7: {

if (App.getInstance().getId() != 0){

page = 7;

fragment = new ProfileFragment();
getSupportActionBar().setTitle(R.string.page_7);

action = true;

} else {

Intent i = new Intent(MainActivity.this, LoginActivity.class);
i.putExtra("pageId", "profile");
startActivityForResult(i, ACTION_LOGIN);
}

break;
}
case 8: {
//Log.d("case8","case8");

Uri uri = Uri.parse("market://details?id=" + "x.y.z");
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
// To count with Play market backstack, After pressing back button,
// to taken back to our application, we need to add following flags to intent.
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
try {
startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("http://play.google.com/store/apps/details?id=" + "x.y.z")));
}
break;
}

case 9: {

//Log.d("case8","son");

if (App.getInstance().getId() != 0) {

Intent i = new Intent(MainActivity.this, SettingsActivity.class);
startActivity(i);

} else {

Intent i = new Intent(MainActivity.this, LoginActivity.class);
i.putExtra("pageId", "settings");
startActivityForResult(i, ACTION_LOGIN);
}

break;
}
}

if (action) {

FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container_body, fragment)
.commit();
}
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// If the nav drawer is open, hide action items related to the content view
return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {

case android.R.id.home: {

return true;
}

default: {

return super.onOptionsItemSelected(item);
}
}
}

@Override
public void onBackPressed() {

if (drawerFragment.isDrawerOpen()) {

drawerFragment.closeDrawer();

} else {

super.onBackPressed();
}
}

@Override
public void setTitle(CharSequence title) {

mTitle = title;
getSupportActionBar().setTitle(mTitle);
}

public void hideAds() {

if (App.getInstance().getAdmob() == ADMOB_DISABLED) {

mContainerAdmob.setVisibility(View.GONE);
}
}
}

在我的 Lg G2 4.4.2 和 Nexus Emulators(8.0 - 9.0) 中,没有问题。

activity_main.xml:

<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">

<LinearLayout
android:id="@+id/container_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />

</LinearLayout>

<FrameLayout
android:id="@+id/container_body"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:visibility="visible"
android:layout_marginBottom="5dp"/>

<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00ffffff"
android:gravity="center"
android:id="@+id/container_admob"
android:visibility="gone">


<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id"
android:layout_marginBottom="3dp">
</com.google.android.gms.ads.AdView>

</LinearLayout>

</LinearLayout>


<fragment
android:id="@+id/fragment_navigation_drawer"
android:name="x.y.z.FragmentDrawer"
android:layout_width="@dimen/nav_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer"
tools:layout="@layout/fragment_navigation_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>

最后,我该如何解决这个问题呢?主要原因是什么(或可能是)?

感谢您的回复。

最佳答案

我认为问题出在您的 @layout/toolbar 中,因为它在您的堆栈跟踪中显示了 android.view.LayoutInflater.parseInclude (LayoutInflater.java:966)。尝试检查您的工具栏 View 是否正确。

关于java - androidx java.lang.ClassNotFoundException : and android. view.InflateException: 同时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58105544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com