GVKun编程网logo

NullPointerException与android.support.v7.widget.Toolbar

17

针对NullPointerException与android.support.v7.widget.Toolbar这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ActionBarDrawerT

针对NullPointerException与android.support.v7.widget.Toolbar这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ActionBarDrawerToggle无法应用于Android.support.v7.widget.Toolbar、Android ActionBar NullPointerException、Android ContentResolver.insert() 抛出 NullPointerException、Android NullPointerException GetDatabaseLocked等相关知识,希望可以帮助到你。

本文目录一览:

NullPointerException与android.support.v7.widget.Toolbar

NullPointerException与android.support.v7.widget.Toolbar

我目前正在尝试在我的应用中实现导航抽屉。我在工具栏为null时遇到问题。我已经在网上进行了许多搜索,并尝试了许多不同的解决方案,但均无济于事。我尚未完成所有代码的编写,但是无法启动我的应用程序来检查导航抽屉。谁能看到我错了?

如果还有其他需要发布的信息,请告诉我。

我在所有活动屏幕上都包括了

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

app_bar.xml

<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.Toolbar   xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:app="http://schemas.android.com/apk/res-auto"   app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:minHeight="?attr/actionBarSize"   android:background="?attr/colorPrimary"   app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" ></android.support.v7.widget.Toolbar>

MainActivity的第72行

setSupportActionBar(mToolbar);

主要活动

public class Trans_List extends ActionBarActivity {  private Toolbar mToolbar;  private CharSequence mTitle;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_trans_list);        mToolbar = (Toolbar) findViewById(R.id.app_bar);        setSupportActionBar(mToolbar);        getSupportActionBar().setDisplayShowHomeEnabled(true);        NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment)                getSupportFragmentManager().findFragmentById(R.id.left_drawer);        drawerFragment.setUp((DrawerLayout) findViewById(R.id.drawer_layout), mToolbar);

Style.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar" >        <item name="windowActionBar">false</item>    </style>    <style name="Theme.split" parent="AppBaseTheme">    </style>    <style name="dialog_custom" parent="@style/Theme.AppCompat.Dialog">        <item name="@android:listPreferredItemPaddingLeft">20dip</item>        <item name="@android:listPreferredItemPaddingRight">20dip</item>        <item name="@android:listPreferredItemPaddingStart">20dip</item>        <item name="@android:listPreferredItemPaddingEnd">20dip</item>    </style></resources>

LogCat

01-07 01:14:29.702    4811-4811/com.lee.yuchan.splt E/AndroidRuntime﹕FATAL EXCEPTION: main        Process: com.lee.yuchan.splt, PID: 4811        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lee.yuchan.splt/com.lee.yuchan.splt.Trans_List}:java.lang.NullPointerException: Attempt to invoke virtual method''java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()''on a null object reference                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)                at android.app.ActivityThread.access$800(ActivityThread.java:144)                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)                at android.os.Handler.dispatchMessage(Handler.java:102)                at android.os.Looper.loop(Looper.java:135)                at android.app.ActivityThread.main(ActivityThread.java:5221)                at java.lang.reflect.Method.invoke(Native Method)                at java.lang.reflect.Method.invoke(Method.java:372)                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ''java.lang.CharSequenceandroid.support.v7.widget.Toolbar.getTitle()'' on a null objectreference                at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:95)                at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:88)                at android.support.v7.internal.app.ToolbarActionBar.<init>(ToolbarActionBar.java:84)                at android.support.v7.app.ActionBarActivityDelegateBase.setSupportActionBar(ActionBarActivityDelegateBase.java:175)                at android.support.v7.app.ActionBarActivity.setSupportActionBar(ActionBarActivity.java:92)                at com.lee.yuchan.splt.Trans_List.onCreate(Trans_List.java:72)                at android.app.Activity.performCreate(Activity.java:5933)                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)                at android.app.ActivityThread.access$800(ActivityThread.java:144)                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)                at android.os.Handler.dispatchMessage(Handler.java:102)                at android.os.Looper.loop(Looper.java:135)                at android.app.ActivityThread.main(ActivityThread.java:5221)                at java.lang.reflect.Method.invoke(Native Method)                at java.lang.reflect.Method.invoke(Method.java:372)                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

主要活动XML

 <?xml version="1.0" encoding="utf-8"?>    <android.support.v4.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"        android:id="@+id/drawer_layout"        android:layout_width="match_parent"        android:layout_height="match_parent">        <!-- The main content view -->    <LinearLayout    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">        <include            layout="@layout/app_bar"/>        <TextView            android:id="@+id/selectItems"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:text="@string/select_instr1"            android:textSize="20sp"            android:gravity="center"            android:paddingTop="4sp"            android:paddingBottom="10sp" >        </TextView>        <ListView            android:id="@+id/listView1"            android:layout_width="match_parent"            android:layout_height="0dip"            android:layout_weight="1" >        </ListView>        <Button            android:id="@+id/buttonChecked"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_margin="0dip"            android:background="@drawable/custom_button"            android:textColor="#ffffff"            android:text="@string/next_button" />    </LinearLayout>    <!-- The navigation drawer -->    <fragment        android:id="@+id/left_drawer"        android:layout_width="@dimen/nav_dr"        android:layout_height="match_parent"        android:layout_gravity="start"        app:layout="@layout/fragment_navigation_drawer"        android:name="com.lee.yuchan.splt.NavigationDrawerFragment"        tools:layout="@layout/fragment_navigation_drawer" />    </android.support.v4.widget.DrawerLayout>

答案1

小编典典

我用工具栏解决了这个问题。经过数小时的搜索和尝试不同的操作,我意识到我的代码没错,它使用的是layout-21中的布局,而不是自从模拟Android
5.0以来的layout文件夹。我所做的所有修改都在layout文件夹中。我对layout-21文件夹中的xml文件进行了更改,问题得以解决。很抱歉浪费了时间和时间。

ActionBarDrawerToggle无法应用于Android.support.v7.widget.Toolbar

ActionBarDrawerToggle无法应用于Android.support.v7.widget.Toolbar

我一直收到错误,说ActionBarDrawerToggle无法应用于v7.widget.Toolbar,因为我看了其他人如何解决类似的问题,他们现在都支持库文件,但错误不会因某种原因消失.

错误说ActionBarDrawerToggle中的ActionBarDrawerToggle()无法应用于android.support.v7.widget.Toolbar然后在实际参数R.id.drawable_ic_drawer(int)下

import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.support.v7.widget.Toolbar;
mDrawerToggle = new android.support.v7.app.ActionBarDrawerToggle(
                getActivity(),/* host Activity */
                mDrawerLayout,/* DrawerLayout object */
                R.drawable.ic_drawer,/* nav drawer image to replace 'Up' caret */
                R.string.navigation_drawer_open,/* "open drawer" description for accessibility */
                R.string.navigation_drawer_close  /* "close drawer" description for accessibility */
        ) {

据说造成错误的部分是R.drawer.ic_drawer.我该如何解决?

解决方法

ActionBarDrawerToggle构造函数如下.
android.support.v7.app.ActionBarDrawerToggle.ActionBarDrawerToggle(Activity activity,DrawerLayout drawerLayout,Toolbar toolbar,int openDrawerContentDescRes,int closeDrawerContentDescRes)

您正在传递R.drawable.ic_drawer drawable而不是工具栏,这就是您收到此错误的原因.

创建工具栏并将其添加为操作栏,并将此工具栏传递给此构造函数.

Android ActionBar NullPointerException

Android ActionBar NullPointerException

我想启用 Android ActionBar,但它对我不起作用.

这是我的MainActivity:

public void onCreate(Bundle savedInstanceState) {

        this.requestwindowFeature(Window.FEATURE_NO_TITLE);


        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        ActionBar actionBar = getActionBar();
        actionBar.show();
        //more code............

这是logcat:

03-04 16:31:09.423: E/AndroidRuntime(1441): FATAL EXCEPTION: main
03-04 16:31:09.423: E/AndroidRuntime(1441): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.salebook/com.example.salebook.MainActivity}: java.lang.NullPointerException
03-04 16:31:09.423: E/AndroidRuntime(1441):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2180)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at android.os.Looper.loop(Looper.java:137)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at android.app.ActivityThread.main(ActivityThread.java:5041)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at java.lang.reflect.Method.invokeNative(Native Method)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at java.lang.reflect.Method.invoke(Method.java:511)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at dalvik.system.NativeStart.main(Native Method)
03-04 16:31:09.423: E/AndroidRuntime(1441): Caused by: java.lang.NullPointerException
03-04 16:31:09.423: E/AndroidRuntime(1441):     at com.example.salebook.MainActivity.onCreate(MainActivity.java:130)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at android.app.Activity.performCreate(Activity.java:5104)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
03-04 16:31:09.423: E/AndroidRuntime(1441):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2144)
03-04 16:31:09.423: E/AndroidRuntime(1441):     ... 11 more

第130行是anctionBar.show(),我在res / menu / menu.xml中:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/itemid_0"
        android:title="Action Item 0"
        android:icon="@drawable/ic_launcher"
        android:orderInCategory="0"
        android:showAsAction="ifRoom|withText" />
    <item android:id="@+id/itemid_1"
        android:title="Action Item 1"
        android:orderInCategory="0" />
    <item android:id="@+id/itemid_2"
        android:title="Action Item 2"
        android:orderInCategory="0" />
    <item android:id="@+id/itemid_3"
        android:title="Action Item 3"
        android:orderInCategory="0" />
</menu>

我没有发现问题.希望有人帮助我.

谢谢.

另外,在appThem风格:

<style name="AppTheme" parent="AppBaseTheme">
        <item name="android:windowActionBar">true</item>
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>

解决方法

您的Actionbar返回null,因为您没有操作栏但是您正在请求使用getActionbar()

确保您具有显示操作栏的窗口功能,这是操作栏显示所必需的.有关详细信息,请查看以下链接.
…检查此问题getActionBar returns null并查看此链接以获取有关您的问题http://blog.perpetumdesign.com/2011/08/strange-case-of-dr-action-and-mr-bar.html的更多信息

Android ContentResolver.insert() 抛出 NullPointerException

Android ContentResolver.insert() 抛出 NullPointerException

如何解决Android ContentResolver.insert() 抛出 NullPointerException?

我正在尝试将一些音频文件(m4a、mp3...)添加到 MediaStore 的音频收藏中,以便其他音乐应用程序可以列出它们。为了简单起见,我只是复制了文档中的内容。 ( https://developer.android.com/training/data-storage/shared/media )

所以在活动的 onCreate() 方法中我写了这个:

val resolver = applicationContext.contentResolver

val audioCollection =
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        MediaStore.Audio.Media.getContentUri(
            MediaStore.VOLUME_EXTERNAL_PRIMARY
        )
    } else {
        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
    }

val songDetails = ContentValues().apply {
    put(MediaStore.Audio.Media.disPLAY_NAME,"Test Track")
}

resolver.insert(audioCollection,songDetails)

但是每次我启动它时,我都会得到以下信息:

 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ''int java.lang.String.lastIndexOf(int)'' on a null object reference
        at android.os.Parcel.createException(Parcel.java:1972)
        at android.os.Parcel.readException(Parcel.java:1934)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
        at android.content.ContentProviderProxy.insert(ContentProviderNative.java:476)
        at android.content.ContentResolver.insert(ContentResolver.java:1593)

清单声明了 READ、WRITE 以及 MANAGE_EXTERNAL_STORAGE 权限,并在我设备上的 Android 应用设置中启用了这些存储权限。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Android NullPointerException GetDatabaseLocked

Android NullPointerException GetDatabaseLocked

我的程序有问题.
我使用数据库来保存我的应用程序的设置.当我在应用程序中保存密码时一切正常,但是当我保存“学校类”的名称时原则上使用相同的方法,但另一个表崩溃并且我收到此错误:

02-19 15:32:04.070: E/AndroidRuntime(14349): FATAL EXCEPTION: main
02-19 15:32:04.070: E/AndroidRuntime(14349): java.lang.NullPointerException
02-19 15:32:04.070: E/AndroidRuntime(14349):    at android.database.sqlite.sqliteOpenHelper.getDatabaseLocked(sqliteOpenHelper.java:224)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at android.database.sqlite.sqliteOpenHelper.getWritableDatabase(sqliteOpenHelper.java:164)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at de.vertretungsplan2.helper.DBHandler.insertKurs(DBHandler.java:95)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at de.vertretungsplan2.tabswipe.adapter.KurseFragment$1.onItemClick(KurseFragment.java:38)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at android.widget.AdapterView.performItemClick(AdapterView.java:297)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2788)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at android.widget.AbsListView$1.run(AbsListView.java:3463)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at android.os.Handler.handleCallback(Handler.java:730)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at android.os.Looper.loop(Looper.java:137)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at android.app.ActivityThread.main(ActivityThread.java:5289)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at java.lang.reflect.Method.invokeNative(Native Method)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at java.lang.reflect.Method.invoke(Method.java:525)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
02-19 15:32:04.070: E/AndroidRuntime(14349):    at dalvik.system.NativeStart.main(Native Method)

这是应该在数据库中写入的方法:

public void insertKurs(String Kurs){
    long rowId = -1;
    try{
        //open Database
        sqliteDatabase db = this.getWritableDatabase();
        //Content
        ContentValues values = new ContentValues();
        values.put(KURS_NAME, Kurs);
        //insert Values in Table 
        rowId = db.insert(TABLE_NAME_KURS, null, values);
        db.close();
    }catch (sqliteException e){
        Log.e(TAG,"insert()",e);
    }finally{
        Log.d(TAG, "insert(): rowId=" + rowId);         
    }
}

此方法没有任何问题:

public void insertPW(String PW){
    sqliteDatabase db = null;
    long rowId = -1;
    try{
        //open Database
        db = this.getWritableDatabase();
        //Content
        ContentValues values = new ContentValues();
        values.put(PASSWORD_NAME, PW);
        //insert Values in Table 
        rowId = db.insert(TABLE_NAME_PW, null, values);
        db.close();
    }catch (sqliteException e){
        Log.e(TAG,"insert()",e);
    }finally{
        Log.d(TAG, "insert(): rowId=" + rowId);         
    }
}

这是调用另一个的方法:

public void onItemClick(AdapterView<?>arg0,View v, int position,long id){                   
            db.insertKurs(kursView1.getItemAtPosition(position).toString());

        }
    }); 

谢谢你的帮助,对不起我的英语:D

解决方法:

传递给sqliteOpenHelper构造函数的Context是null.

关于NullPointerException与android.support.v7.widget.Toolbar的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ActionBarDrawerToggle无法应用于Android.support.v7.widget.Toolbar、Android ActionBar NullPointerException、Android ContentResolver.insert() 抛出 NullPointerException、Android NullPointerException GetDatabaseLocked等相关知识的信息别忘了在本站进行查找喔。

本文标签: