【问题标题】:Android onClickListener NullPointerExceptionAndroid onClickListener NullPointerException
【发布时间】:2014-07-28 07:35:55
【问题描述】:

所有。我已经搜索过,但找不到任何可以帮助我解决此问题的内容。

由于 NullPointerException,我的应用在启动时几乎立即退出。我怀疑问题可能在于我使用的是可绘制图像(ImageView)而不是按钮(View)作为您单击的东西。

感谢您的帮助。这让我发疯了好几个小时!

代码如下:

package com.example.imageswitchermk2;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageView;

public class MainActivity extends Activity implements OnClickListener{
ImageView blankTile;    

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
//        requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);
    blankTile = (ImageView) findViewById(R.drawable.blank); 
    blankTile.setOnClickListener(this); //LINE 19
}
    public void onClick(View v) {
        blankTile.setId(R.drawable.zero);
    }
}

堆栈如下:

Thread [<1> main] (Suspended (exception NullPointerException))  
<VM does not provide monitor information>   
MainActivity.onCreate(Bundle) line: 19  
MainActivity(Activity).performCreate(Bundle) line: 5231 
Instrumentation.callActivityOnCreate(Activity, Bundle) line: 1087   
ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 2148    
ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 2233 
ActivityThread.access$800(ActivityThread, ActivityThread$ActivityClientRecord, Intent) line: 135    
ActivityThread$H.handleMessage(Message) line: 1196  
ActivityThread$H(Handler).dispatchMessage(Message) line: 102    
Looper.loop() line: 136 
ActivityThread.main(String[]) line: 5001    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 515  
ZygoteInit$MethodAndArgsCaller.run() line: 785  
ZygoteInit.main(String[]) line: 601 
NativeStart.main(String[]) line: not available [native method]  

【问题讨论】:

  • 发布activity_main.xml

标签: android nullpointerexception android-imageview


【解决方案1】:
blankTile = (ImageView) findViewById(R.drawable.blank); 

您不能使用R.drawable 检索项目。你必须使用R.id

【讨论】:

  • 没有@FrankN.Stein。这是正确的。他实际上可以设置drawable的相同id。但是设置id,为R.id生成一个条目
  • 是的。我以前检索过 R.drawable 的可绘制对象。这就是拥有它的意义所在。 :-)
  • @user3451652 我没有收到你的评论,
  • 谢谢。这确实阻止了过早的退出。不幸的是,点击仍然不起作用。我怀疑那是因为我正在尝试使用 R.drawable 检索替换图像(零)。但我无法使用 R.id 检索“零”,因为它不在我的布局 XML 文件中(或显示在屏幕上)。所以它没有 id 。引用它的唯一方法是通过它的 R.drawable 编号。所以点击不起作用。感谢您提供任何进一步的见解!
  • @user3451652 使用blankTile.setDrawableResource(R.drawable.zero);请参阅下面的答案。
【解决方案2】:

要获取 View 的 ID,请使用 R.id 而不是 R.drawable,所以更改

blankTile = (ImageView) findViewById(R.drawable.blank); 

blankTile = (ImageView) findViewById(R.id.blank); 

并使用blankTile.setImageResource(R.drawable.zero);设置drawable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多