Java 一次点击声音导致NullPointerException的按钮
我是java新手,我正在创建一个按钮,一旦按下,就会得到一个简单的声音。 我的代码如下所示:Java 一次点击声音导致NullPointerException的按钮,java,android,xml,nullpointerexception,Java,Android,Xml,Nullpointerexception,我是java新手,我正在创建一个按钮,一旦按下,就会得到一个简单的声音。 我的代码如下所示: ImageButton one = (ImageButton) new Button(R.id.imageButton); //error here final MediaPlayer mp = MediaPlayer.create(this, R.raw.pears); one.setOnClickListener(new OnClickListener(){ public void onC
ImageButton one = (ImageButton) new Button(R.id.imageButton); //error here
final MediaPlayer mp = MediaPlayer.create(this, R.raw.pears);
one.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
mp.start();
}
});
我得到一个错误“在按钮不能应用于int”但我的变量不是int类型,而是一个按钮类型。还有一个与NullPointerException有关的致命错误。我查找了NullPointerException,似乎您在未创建对象时收到了错误。但我正在创建一个ImageButton对象。。。
有什么建议吗?谢谢
以下是onCreate方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_item); //layout with ImageButton id imageButton
mTitle = mDrawerTitle = getTitle();
// load slide menu items
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
// nav drawer icons from resources
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
navDrawerItems = new ArrayList<NavDrawerItem>();
// adding nav drawer items to array
// Home
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
// Find People
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
// Recycle the typed array
navMenuIcons.recycle();
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
// setting the nav drawer list adapter
adapter = new NavDrawerListAdapter(getApplicationContext(),
navDrawerItems);
mDrawerList.setAdapter(adapter);
// enabling action bar app icon and behaving it as toggle button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, //nav menu toggle icon
R.string.app_name, // nav drawer open - description for accessibility
R.string.app_name // nav drawer close - description for accessibility
) {
public void onDrawerClosed(View view) {
//getSupportActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getSupportActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
// on first time display view for first nav item
displayView(0);
}
final Context context = getApplicationContext();
final int duration = Toast.LENGTH_SHORT;
ImageButton one;
try {
one = (ImageButton) findViewById(R.id.imageButton);
one.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
final MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.pears);
mp.start();
}
});
}
catch (Exception e){
Log.d("wshhsounds", Log.getStackTraceString(new Exception()));
}
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_项);//带有ImageButton id的布局ImageButton
mTitle=mDrawerTitle=getTitle();
//加载幻灯片菜单项
navMenuTitles=getResources().getStringArray(R.array.nav\u抽屉\u项目);
//参考资料中的导航抽屉图标
navMenuIcons=getResources()
.obtainTypedArray(R.array.nav_drawer_图标);
mDrawerLayout=(抽屉布局)findViewById(R.id.抽屉布局);
mDrawerList=(ListView)findViewById(R.id.list\u slidermenu);
navDrawerItems=新的ArrayList();
//将导航抽屉项添加到阵列
//家
添加(新的NavDrawerItem(navMenuTitles[0],navMenuIcons.getResourceId(0,-1));
//找人
添加(新的NavDrawerItem(navMenuTitles[1],navMenuIcons.getResourceId(1,-1));
//回收类型化数组
navMenuIcons.recycle();
setOnItemClickListener(新的SlideMenuClickListener());
//设置导航抽屉列表适配器
适配器=新的NavDroperListAdapter(getApplicationContext(),
纳维特姆斯);
mDrawerList.setAdapter(适配器);
//启用操作栏应用程序图标并将其作为切换按钮
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mDrawerToggle=新操作BarDrawerToggle(此,mDrawerLayout,
R.drawable.ic_抽屉,//导航菜单切换图标
R.string.app_name,//导航抽屉打开-可访问性说明
R.string.app_name//nav抽屉关闭-可访问性说明
) {
公共无效onDrawerClosed(视图){
//getSupportActionBar().setTitle(mTitle);
//调用onPrepareOptions菜单()以显示操作栏图标
无效操作菜单();
}
打开图纸上的公共空白(视图抽屉视图){
getSupportActionBar().setTitle(mDrawerTitle);
//调用onPrepareOptions菜单()隐藏操作栏图标
无效操作菜单();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
如果(savedInstanceState==null){
//第一个导航项目的首次显示视图
显示视图(0);
}
最终上下文=getApplicationContext();
最终整数持续时间=Toast.LENGTH\u SHORT;
图像按钮一;
试一试{
一=(ImageButton)findViewById(R.id.ImageButton);
setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
final MediaPlayer mp=MediaPlayer.create(getApplicationContext(),R.raw.pears);
mp.start();
}
});
}
捕获(例外e){
Log.d(“wshhshounds”,Log.getStackTraceString(newException());
}
}
根据@Ryan的要求,以下是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:padding="0dp" >
<ImageButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/button"
android:scaleType="fitCenter"
android:background="@color/white"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/blue">
<TextView
android:id="@+id/grid_item_label_static"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="Pears"
android:layout_marginTop="3px"
android:layout_gravity="center"
android:textSize="50px"
android:textColor="@color/white"
android:paddingTop="11dp"
android:paddingBottom="12dp"/>
</LinearLayout>
</LinearLayout>
根据@Ryan的要求,日志如下:
03-25 13:57:54.530 13615-13615/com.non.nonabona.sounds
E/AndroidRuntime﹕ 致命异常:主
java.lang.RuntimeException:无法启动活动组件信息{com.non.nonabona.sounds/com.non.nonabona.sounds.MainActivity}:
java.lang.NullPointerException
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2359)
在android.app.ActivityThread.access$700(ActivityThread.java:165)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:5455)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:525)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1187)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.NullPointerException
位于com.non.nonabona.sounds.MainActivity.onCreate(MainActivity.java:76)
位于android.app.Activity.performCreate(Activity.java:5372)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2359)
在android.app.ActivityThread.access$700(ActivityThread.java:165)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:5455)
在java.lang.reflect.Method.Invokenactive(N
ImageButton one = (ImageButton)findViewById(R.id.imageButton);
ImageButton one = (ImageButton) findViewByID(R.id.imageButton)