Android的NullPointerException异常错误信息 [英] Android NullPointerException Error Message
问题描述
我试图创建的Android导航抽屉里。这里是code,我设置了导航抽屉:
公共类NavigationDrawer延伸活动{
上下文语境;
私有String [] drawerListViewItems;
私人DrawerLayout drawerLayout;
私人的ListView drawerListView;
私人ActionBarDrawerToggle actionBarDrawerToggle;保护DrawerLayout fullLayout;
受保护的FrameLayout actContent;@覆盖
公共无效的setContentView(最终诠释layoutResID){ fullLayout =(DrawerLayout)getLayoutInflater()。膨胀(
R.layout.navigation_drawer,NULL); //你的基地布局在这里
actContent =(的FrameLayout)fullLayout.findViewById(R.id.act_content);
。getLayoutInflater()膨胀(layoutResID,actContent,真正的);
super.setContentView(fullLayout); //得到的strings.xml列表项
drawerListViewItems = getResources()getStringArray(R.array.items)。
//在navigation_drawer.xml得到定义的ListView
drawerListView =(ListView控件)findViewById(R.id.left_drawer); //设置列表视图中的适配器
drawerListView.setAdapter(新ArrayAdapter<串GT;(这一点,
R.layout.drawer_listview_item,drawerListViewItems)); //应用程序图标
drawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout); actionBarDrawerToggle =新ActionBarDrawerToggle(这一点,/ *主机活动* /
drawerLayout,/ * DrawerLayout对象* /
R.drawable.ic_drawer,/ *导航抽屉图标来取代上插入符* /
R.string.drawer_open,/ *打开的抽屉的描述* /
R.string.drawer_close / *关闭抽屉的描述* /
); //设置actionBarDrawerToggle为DrawerListener
drawerLayout.setDrawerListener(actionBarDrawerToggle); getActionBar()setDisplayHomeAsUpEnabled(真)。 //只是样式选项添加阴影抽屉的右边缘
drawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
GravityCompat.START); drawerListView.bringToFront();
//drawerListView.requestLayout(); drawerListView.setOnItemClickListener(新DrawerItemClickListener());
}@覆盖
公共无效onConfigurationChanged(配置NEWCONFIG){
super.onConfigurationChanged(NEWCONFIG);
actionBarDrawerToggle.onConfigurationChanged(NEWCONFIG);
}@覆盖
公共布尔onOptionsItemSelected(菜单项项){ //调用ActionBarDrawerToggle.onOptionsItemSelected(),如果它返回
//真
//那么它处理的应用程序图标触摸事件
如果(actionBarDrawerToggle.onOptionsItemSelected(项目)){
返回true;
}
返回super.onOptionsItemSelected(项目);
}@覆盖
保护无效onPostCreate(捆绑savedInstanceState){
super.onPostCreate(savedInstanceState);
//同步onRestoreInstanceState后切换状态已经发生。
actionBarDrawerToggle.syncState();
}私有类DrawerItemClickListener实现ListView.OnItemClickListener {
@覆盖
公共无效onItemClick(适配器视图父母,观景,INT位置,
长ID){
开关(位置){
//仪表板
情况下0:
意图dashboardIntent =新意图(背景下,Dashboard.class);
startActivity(dashboardIntent);
打破;
//帐户
情况1:
打破;
//设置
案例2:
打破;
//登出
案例3:
Toast.makeText(NavigationDrawer.this,你已经登录了!,Toast.LENGTH_SHORT)
。显示();
System.exit(0);
打破;
}
drawerLayout.closeDrawer(drawerListView);
}
}
}
不过,我得到NullPointerException异常错误信息,当我点击第一个项目在导航抽屉中的LogCat中:
一十一月8日至27日:10:55.932:E / AndroidRuntime(7088):致命异常:主要
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):显示java.lang.NullPointerException
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在android.content.ComponentName<&初始化GT;(ComponentName.java:75)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在android.content.Intent<&初始化GT;(Intent.java:3201)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在com.example.mymoney.NavigationDrawer $ DrawerItemClickListener.onItemClick(NavigationDrawer.java:105)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在android.widget.AdapterView.performItemClick(AdapterView.java:292)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在android.widget.AbsListView.performItemClick(AbsListView.java:1185)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在android.widget.AbsListView $ PerformClick.run(AbsListView.java:2713)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在android.widget.AbsListView $ 1.run(AbsListView.java:3468)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在android.os.Handler.handleCallback(Handler.java:605)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在android.os.Handler.dispatchMessage(Handler.java:92)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在android.os.Looper.loop(Looper.java:137)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在android.app.ActivityThread.main(ActivityThread.java:4512)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在java.lang.reflect.Method.invokeNative(本机方法)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在java.lang.reflect.Method.invoke(Method.java:511)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:982)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
十一月8日至27日:10:55.932:E / AndroidRuntime(7088):在dalvik.system.NativeStart.main(本机方法)
十一月8日至27日:11:23.643:I /流程(7088):发送信号。 PID:7088 SIG:9
此外,当我与 Toast.makeText(NavigationDrawer.this,位置,Toast.LENGTH_SHORT)试图.show();
,它表明我同样的NullPointerException异常错误信息。我不知道为什么会这样。
先谢谢了。
修改
改codeS后的建议,我得到了这些错误消息:
11月8日至27日:24:52.127:E / AndroidRuntime(10207):致命异常:主要
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.mymoney / com.example.mymoney.Dashboard}:显示java.lang.NullPointerException
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在android.app.ActivityThread.access $ 600(ActivityThread.java:127)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1161)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在android.os.Handler.dispatchMessage(Handler.java:99)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在android.os.Looper.loop(Looper.java:137)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在android.app.ActivityThread.main(ActivityThread.java:4512)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在java.lang.reflect.Method.invokeNative(本机方法)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在java.lang.reflect.Method.invoke(Method.java:511)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:982)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在dalvik.system.NativeStart.main(本机方法)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):致:显示java.lang.NullPointerException
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在com.example.mymoney.Dashboard.onCreate(Dashboard.java:12)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在android.app.Activity.performCreate(Activity.java:4465)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
十一月8日至27日:24:52.127:E / AndroidRuntime(10207):... 11个
我的仪表盘类这样的:
公共类仪表板延伸NavigationDrawer {
INT ID; @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.dashboard);
。ID = getIntent()getExtras()调用getInt(用户ID);
}
}
我从我的登录类的这一部分获得ID
公共无效onLogInClicked(查看视图){
// TODO自动生成方法存根
DatabaseAdapter mDbHelper =新DatabaseAdapter(本);
mDbHelper.createDatabase();
mDbHelper.open();
UserController的UC =新UserController中(mDbHelper.open());
ArrayList的<&的usermodel GT; ulogin = uc.getLogin();
布尔登录= FALSE;
的for(int i = 0; I< ulogin.size();我++){
如果(txtUserName.getText()。的toString()
.equals(ulogin.get(I).getUserName()。的toString())
&功放;&安培; txtPwd.getText()。的toString()
.equals(ulogin.get(I).getPassword()。的toString())){
Toast.makeText(MainActivity.this,登录成功!
Toast.LENGTH_SHORT).show();
loginintent =新意图(背景下,Dashboard.class);
loginintent.putExtra(username的,ulogin.get(I)
。.getUserName()的toString());
startActivity(loginintent);
登录= TRUE;
打破;
}
}
}
所以基本上我所试图做的是用户登录后,他们将被重定向到仪表板。然后,用户也可以使用抽屉中导航。我缺少的东西吗?
问题:
新意图(背景下,Dashboard.class);
的背景
从不实例从而给您 NPE
解决方案:
新意图(NavigationDrawer.this,Dashboard.class);
的 NavigationDrawer.this
将获得上下文的参照
直接从您的活动类。
I am trying to create a navigation drawer in Android. Here is the code where I set up the navigation drawer:
public class NavigationDrawer extends Activity {
Context context;
private String[] drawerListViewItems;
private DrawerLayout drawerLayout;
private ListView drawerListView;
private ActionBarDrawerToggle actionBarDrawerToggle;
protected DrawerLayout fullLayout;
protected FrameLayout actContent;
@Override
public void setContentView(final int layoutResID) {
fullLayout = (DrawerLayout) getLayoutInflater().inflate(
R.layout.navigation_drawer, null); // Your base layout here
actContent = (FrameLayout) fullLayout.findViewById(R.id.act_content);
getLayoutInflater().inflate(layoutResID, actContent, true);
super.setContentView(fullLayout);
// get list items from strings.xml
drawerListViewItems = getResources().getStringArray(R.array.items);
// get ListView defined in navigation_drawer.xml
drawerListView = (ListView) findViewById(R.id.left_drawer);
// Set the adapter for the list view
drawerListView.setAdapter(new ArrayAdapter<String>(this,
R.layout.drawer_listview_item, drawerListViewItems));
// App Icon
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
actionBarDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
drawerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */
R.string.drawer_open, /* "open drawer" description */
R.string.drawer_close /* "close drawer" description */
);
// Set actionBarDrawerToggle as the DrawerListener
drawerLayout.setDrawerListener(actionBarDrawerToggle);
getActionBar().setDisplayHomeAsUpEnabled(true);
// just styling option add shadow the right edge of the drawer
drawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
GravityCompat.START);
drawerListView.bringToFront();
//drawerListView.requestLayout();
drawerListView.setOnItemClickListener(new DrawerItemClickListener());
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
actionBarDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// call ActionBarDrawerToggle.onOptionsItemSelected(), if it returns
// true
// then it has handled the app icon touch event
if (actionBarDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
actionBarDrawerToggle.syncState();
}
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView parent, View view, int position,
long id) {
switch (position) {
//Dashboard
case 0:
Intent dashboardIntent = new Intent(context, Dashboard.class);
startActivity(dashboardIntent);
break;
//Account
case 1:
break;
//Setting
case 2:
break;
//Logout
case 3:
Toast.makeText(NavigationDrawer.this, "You have logged out!", Toast.LENGTH_SHORT)
.show();
System.exit(0);
break;
}
drawerLayout.closeDrawer(drawerListView);
}
}
}
However, I am getting NullPointerException error message as the LogCat when I click on the first item in navigation drawer:
8-27 11:10:55.932: E/AndroidRuntime(7088): FATAL EXCEPTION: main
08-27 11:10:55.932: E/AndroidRuntime(7088): java.lang.NullPointerException
08-27 11:10:55.932: E/AndroidRuntime(7088): at android.content.ComponentName.<init>(ComponentName.java:75)
08-27 11:10:55.932: E/AndroidRuntime(7088): at android.content.Intent.<init>(Intent.java:3201)
08-27 11:10:55.932: E/AndroidRuntime(7088): at com.example.mymoney.NavigationDrawer$DrawerItemClickListener.onItemClick(NavigationDrawer.java:105)
08-27 11:10:55.932: E/AndroidRuntime(7088): at android.widget.AdapterView.performItemClick(AdapterView.java:292)
08-27 11:10:55.932: E/AndroidRuntime(7088): at android.widget.AbsListView.performItemClick(AbsListView.java:1185)
08-27 11:10:55.932: E/AndroidRuntime(7088): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2713)
08-27 11:10:55.932: E/AndroidRuntime(7088): at android.widget.AbsListView$1.run(AbsListView.java:3468)
08-27 11:10:55.932: E/AndroidRuntime(7088): at android.os.Handler.handleCallback(Handler.java:605)
08-27 11:10:55.932: E/AndroidRuntime(7088): at android.os.Handler.dispatchMessage(Handler.java:92)
08-27 11:10:55.932: E/AndroidRuntime(7088): at android.os.Looper.loop(Looper.java:137)
08-27 11:10:55.932: E/AndroidRuntime(7088): at android.app.ActivityThread.main(ActivityThread.java:4512)
08-27 11:10:55.932: E/AndroidRuntime(7088): at java.lang.reflect.Method.invokeNative(Native Method)
08-27 11:10:55.932: E/AndroidRuntime(7088): at java.lang.reflect.Method.invoke(Method.java:511)
08-27 11:10:55.932: E/AndroidRuntime(7088): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982)
08-27 11:10:55.932: E/AndroidRuntime(7088): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
08-27 11:10:55.932: E/AndroidRuntime(7088): at dalvik.system.NativeStart.main(Native Method)
08-27 11:11:23.643: I/Process(7088): Sending signal. PID: 7088 SIG: 9
Also, when I tried with Toast.makeText(NavigationDrawer.this, position, Toast.LENGTH_SHORT).show();
, it shows me the same nullPointerException error message. I wonder why is it so.
Thanks in advance.
EDIT
After changed the codes as suggested, I got these error messages:
08-27 11:24:52.127: E/AndroidRuntime(10207): FATAL EXCEPTION: main
08-27 11:24:52.127: E/AndroidRuntime(10207): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mymoney/com.example.mymoney.Dashboard}: java.lang.NullPointerException
08-27 11:24:52.127: E/AndroidRuntime(10207): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
08-27 11:24:52.127: E/AndroidRuntime(10207): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
08-27 11:24:52.127: E/AndroidRuntime(10207): at android.app.ActivityThread.access$600(ActivityThread.java:127)
08-27 11:24:52.127: E/AndroidRuntime(10207): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
08-27 11:24:52.127: E/AndroidRuntime(10207): at android.os.Handler.dispatchMessage(Handler.java:99)
08-27 11:24:52.127: E/AndroidRuntime(10207): at android.os.Looper.loop(Looper.java:137)
08-27 11:24:52.127: E/AndroidRuntime(10207): at android.app.ActivityThread.main(ActivityThread.java:4512)
08-27 11:24:52.127: E/AndroidRuntime(10207): at java.lang.reflect.Method.invokeNative(Native Method)
08-27 11:24:52.127: E/AndroidRuntime(10207): at java.lang.reflect.Method.invoke(Method.java:511)
08-27 11:24:52.127: E/AndroidRuntime(10207): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982)
08-27 11:24:52.127: E/AndroidRuntime(10207): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
08-27 11:24:52.127: E/AndroidRuntime(10207): at dalvik.system.NativeStart.main(Native Method)
08-27 11:24:52.127: E/AndroidRuntime(10207): Caused by: java.lang.NullPointerException
08-27 11:24:52.127: E/AndroidRuntime(10207): at com.example.mymoney.Dashboard.onCreate(Dashboard.java:12)
08-27 11:24:52.127: E/AndroidRuntime(10207): at android.app.Activity.performCreate(Activity.java:4465)
08-27 11:24:52.127: E/AndroidRuntime(10207): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
08-27 11:24:52.127: E/AndroidRuntime(10207): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
08-27 11:24:52.127: E/AndroidRuntime(10207): ... 11 more
My dashBoard class as this:
public class Dashboard extends NavigationDrawer{
int id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dashboard);
id = getIntent().getExtras().getInt("userID");
}
}
I am getting the id from this part of my login class:
public void onLogInClicked(View view) {
// TODO Auto-generated method stub
DatabaseAdapter mDbHelper = new DatabaseAdapter(this);
mDbHelper.createDatabase();
mDbHelper.open();
UserController uc = new UserController(mDbHelper.open());
ArrayList<UserModel> ulogin = uc.getLogin();
boolean login = false;
for (int i = 0; i < ulogin.size(); i++) {
if (txtUserName.getText().toString()
.equals(ulogin.get(i).getUserName().toString())
&& txtPwd.getText().toString()
.equals(ulogin.get(i).getPassword().toString())) {
Toast.makeText(MainActivity.this, "Login Successfully!",
Toast.LENGTH_SHORT).show();
loginintent = new Intent(context, Dashboard.class);
loginintent.putExtra("userName", ulogin.get(i)
.getUserName().toString());
startActivity(loginintent);
login = true;
break;
}
}
}
So basically what I am trying to do is after user logged in, they will be redirected to dashboard. Then, user can also navigate around using the drawer. Am I missing something?
problem:
new Intent(context, Dashboard.class);
The context
is never instantiated thus giving you NPE
solution:
new Intent(NavigationDrawer.this, Dashboard.class);
The NavigationDrawer.this
will get the reference of the context
directly from your activity class.
这篇关于Android的NullPointerException异常错误信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!