【问题标题】:FATAL EXCEPTION: main error in android studio致命例外:android studio 中的主要错误
【发布时间】:2018-08-16 11:12:09
【问题描述】:

我最近更新了代码并运行只是为了在应用程序在下一秒启动和关闭的位置看到此错误。 以前的版本运行正常我在更新后遇到了这个问题。

08-16 16:23:29.883 13995-13995/? E/AndroidRuntime: 致命异常: main 进程:com.example.hemanth.anew,PID:13995 java.lang.RuntimeException:无法启动活动 组件信息{com.example.hemanth.anew/com.example.hemanth.anew. 家庭活动}: java.lang.NullPointerException:尝试在空对象上调用虚拟方法“java.lang.Class java.lang.Object.getClass()” 参考 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2358) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2420) 在 android.app.ActivityThread.access$900(ActivityThread.java:154) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5292) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 原因:java.lang.NullPointerException:尝试在 null 上调用虚拟方法“java.lang.Class java.lang.Object.getClass()” 对象引用 在 com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx.getBottomNavigationItemViews(BottomNavigationViewEx.java:569) 在 com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx.enableAnimation(BottomNavigationViewEx.java:341) 在 com.example.hemanth.anew.Utils.BottomNavigationViewHelper.setupBottomNavigationView(BottomNavigationViewHelper.java:11) 在 com.example.hemanth.anew.HomeActivity.setupBottomNavigationView(HomeActivity.java:25) 在 com.example.hemanth.anew.HomeActivity.onCreate(HomeActivity.java:19) 在 android.app.Activity.performCreate(Activity.java:5990) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2311) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2420) 在 android.app.ActivityThread.access$900(ActivityThread.java:154) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5292) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

这是我的主页活动代码:

package com.example.hemanth.anew;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.example.hemanth.anew.Utils.BottomNavigationViewHelper;
import com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx;

public class HomeActivity extends AppCompatActivity {

private static final String TAG = "HomeActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    Log.d(TAG, "onCreate: starting.");
    setupBottomNavigationView();
}

private void setupBottomNavigationView(){
    Log.d(TAG, "setupBottomNavigationView: setting up BottomNavigationView");
    BottomNavigationViewEx bottomNavigationViewEx = (BottomNavigationViewEx) findViewById(R.id.bottomNavViewBar);
    BottomNavigationViewHelper.setupBottomNavigationView(bottomNavigationViewEx);

  }
}

有人可以帮我克服这个错误吗? 检查这个 BottomNavigationViewHelper.java 文件:

package com.example.hemanth.anew.Utils;
import android.annotation.SuppressLint;
import android.util.Log;

import com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx;

public class BottomNavigationViewHelper {
private static final String TAG = "BottomNavigationViewHel";
@SuppressLint("LongLogTag")
public static void setupBottomNavigationView(BottomNavigationViewEx 
bottomNavigationViewEx){
    Log.d(TAG, "setupBottomNavigationView: setting up BottomNavigationView");
    bottomNavigationViewEx.enableAnimation(false);
    bottomNavigationViewEx.enableItemShiftingMode(false);
    bottomNavigationViewEx.enableShiftingMode(false);
    bottomNavigationViewEx.setTextVisibility(false);
}
}

这是菜单部分下的xml文件

<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_alignParentBottom="true">

    <com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/bottomNavViewBar"
        android:background="@drawable/white_grey_border_top"
        app:menu="@menu/bottom_navigation_menu">


    </com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx>

</RelativeLayout>



</merge>

这里是 activity_home.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".HomeActivity">


 <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <!-- top toolbar -->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/relLayout1">

        <include layout="@layout/layout_top_tabs"/>

    </RelativeLayout>

    <!-- Middle section (body) -->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/relLayout2"
        android:layout_below="@+id/relLayout1">

        <include layout="@layout/layout_center_viewpager"/>


    </RelativeLayout>


    <!-- bottom navigation -->
    <include layout="@layout/layout_bottom_navigation_view"/>


</RelativeLayout>


</android.support.design.widget.CoordinatorLayout>

这里是 bottom_navigation_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item
    android:id="@+id/ic_house"
    android:icon="@drawable/ic_house"
    android:title="">
</item>

<item
    android:id="@+id/ic_search"
    android:icon="@drawable/ic_search"
    android:title="">
</item>

<item
    android:id="@+id/ic_circle"
    android:icon="@drawable/ic_circle"
    android:title="">
</item>

<item
    android:id="@+id/ic_alert"
    android:icon="@drawable/ic_alert"
    android:title="">
</item>

<item
    android:id="@+id/ic_android"
    android:icon="@drawable/ic_android"
    android:title="">
</item>

</menu>

感谢所有答案,我在最新版本的 android studio 中找到了解决问题的简单方法。它是这样的:将其添加到 BotttomNavigationView.xml 文件中

app:labelVisibilityMode="unlabeled" 

【问题讨论】:

  • NullPointerException in line BottomNavigationViewHelper.setupBottomNavigationView(bottomNavigationViewEx);
  • 你能告诉我们你的 XML 布局文件是什么样的吗? (layout.activity_home)
  • 我已经更新了 activity_home.xml 文件,请检查

标签: java android android-studio


【解决方案1】:

您在setupBottomNavigationView() 方法中有一个NullPointerException。 好像bottomNavigationViewEx没有检索到。

【讨论】:

  • 我已经更新了 BottomNavigationViewHelper.java 的代码。请检查
  • 我最近更新了代码 -> 你有没有指出不同之处?你检查过你的日志吗?您是否进行了刷新安装?
【解决方案2】:

这条线似乎通向NullPointerException

BottomNavigationViewHelper.setupBottomNavigationView(bottomNavigationViewEx);

你确定bottomNavigationViewEx 有一些有效值吗?

编辑:

好的,我知道错误是什么。我尝试了你的代码,我发现它在 compileSdkVersion 27 之前运行良好。你再往上走,即到现在的 28,你会得到一个错误。这是因为库的作者已经为 26 构建了库 - check here。它适用于 27,因为他用于与 27 兼容的代码没有太大变化。但是当 28 出来时,它不受支持。作者必须为 SDK 28 更新他的库。您还有以下选择:

  • 要么降级您​​的项目以使用 BottomNavigationViewEx 的版本(代码中的 SDK 26,但 SDK 27 应该也可以正常工作)
  • 使用BottomNavigationViewEx以外的其他项目
  • 请BottomNavigationViewEx的开发者升级他的项目
  • 将 BottomNavigationViewEx 导入您的项目并重写有问题的方法 你自己

【讨论】:

  • 是的,确实如此。我已经更新了 BottomNavigationViewHelper.java 的代码,请帮忙。
  • 你能把你的xml和你的app:menu中指定的菜单文件贴在xml中吗?因为我认为错误是菜单文件为空。如果你仔细观察,它会在 getBottomNavigationItemViews() 处失败,这是一个返回按钮的函数。
  • 我已经更新了菜单文件,请随时查看。
  • 您发布了磨损的 xml 文件。请发布 layout_bottom_navigation_view
  • 我已经更新了 layout_bottom_navigation_view.xml 文件
【解决方案3】:

检查这个例子:

第 1 步。将其添加到存储库末尾的根 build.gradle 中:

allprojects {
repositories {
    ...
    maven { url "https://jitpack.io" }
}

}

步骤 2. 添加依赖项

compile 'com.github.ittianyu:BottomNavigationViewEx:1.1.2'

对于 Maven:

第 13 步。将其添加到存储库末尾的根 build.gradle 中:

<repositories>
 <repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
 </repository>
</repositories>

步骤 4. 添加依赖项

<dependency>
 <groupId>com.github.ittianyu</groupId>
 <artifactId>BottomNavigationViewEx</artifactId>
 <version>1.1.2</version>
</dependency>

第 5 步。 BottomNavigationViewEx.java 并将其复制到您的项目中。

第 6 步。在 xml 中添加自定义小部件:

<com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx
 android:id="@+id/bnve"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_alignParentBottom="true"
 android:background="@color/colorPrimary"
 app:itemIconTint="@color/selector_item_color"
 app:itemTextColor="@color/selector_item_color"
 app:menu="@menu/menu_navigation_with_view_pager" />

步骤 7 .Activity 中的绑定视图:

BottomNavigationViewEx bnve = (BottomNavigationViewEx) findViewById(R.id.bnve);

第 8 步 .禁用所有动画

bnve.enableAnimation(false);
bnve.enableShiftingMode(false);
bnve.enableItemShiftingMode(false);

步骤 9 . 与 ViewPager 绑定

// set adapter
adapter = new VpAdapter(getSupportFragmentManager(), fragments);
bind.vp.setAdapter(adapter);

// binding with ViewPager
bind.bnve.setupWithViewPager(bind.vp);

步骤 10 .ProGuard

如果您使用 ProGuard,您可能需要添加以下选项:

-keep public class android.support.design.widget.BottomNavigationView { *; }
-keep public class android.support.design.internal.BottomNavigationMenuView { *; }
-keep public class android.support.design.internal.BottomNavigationPresenter { *; }
-keep public class android.support.design.internal.BottomNavigationItemView { *; }

【讨论】:

    【解决方案4】:

    如果不是静态的,您必须创建一个 BottomNavigationViewHelper 类的实例。由于 Null 指针异常从那里启动,这是因为,如果未初始化 BottomNavigationViewHelper。所以,用这个更新你的代码,看看错误发生了。

       private void setupBottomNavigationView(){
            Log.d(TAG, "setupBottomNavigationView: setting up BottomNavigationView");
            BottomNavigationViewEx bottomNavigationViewEx = (BottomNavigationViewEx) findViewById(R.id.bottomNavViewBar);
    BottomNavigationViewHelper helper=new BottomNavigationViewHelper();
    helper.setupBottomNavigationView(bottomNavigationViewEx);
    
          }
    

    【讨论】:

    • 这是不正确的,因为 setupBottomNavigationView 方法是静态的,因此可以从任何地方调用而无需对象初始化。
    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 2014-09-10
    • 2013-02-14
    • 1970-01-01
    相关资源
    最近更新 更多