Android:Gridview强制关闭
我正在学习一个关于如何使用一个。我一直无法让代码工作,但每当我编译并运行应用程序时,force就会关闭。Logcat称其“无法实例化活动ComponentInfo”相当于一系列其他错误。我不擅长调试,所以我陷入了僵局。这是我的代码:Android:Gridview强制关闭,android,gridview,Android,Gridview,我正在学习一个关于如何使用一个。我一直无法让代码工作,但每当我编译并运行应用程序时,force就会关闭。Logcat称其“无法实例化活动ComponentInfo”相当于一系列其他错误。我不擅长调试,所以我陷入了僵局。这是我的代码: public class GridViewDemo extends Activity { public String[] filenames = { "File 1", "File 2",
public class GridViewDemo extends Activity {
public String[] filenames = {
"File 1",
"File 2",
"Roflcopters"
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ButtonAdapter(this));
}
//Classes
public class ButtonAdapter extends BaseAdapter {
private Context mContext;
// Gets the context so it can be used later
public ButtonAdapter(Context c) {
mContext = c;
}
// Total number of things contained within the adapter
public int getCount() {
return filenames.length;
}
// Require for structure, not really used in my code.
public Object getItem(int position) {
return null;
}
// Require for structure, not really used in my code. Can
// be used to get the id of an item in the adapter for
// manual control.
public long getItemId(int position) {
return position;
}
@SuppressWarnings("null")
public View getView(int position,
View convertView, ViewGroup parent) {
Button btn = null;
btn.setOnClickListener(new MyOnClickListener(position));
if (convertView == null) {
// if it's not recycled, initialize some attributes
btn = new Button(mContext);
btn.setLayoutParams(new GridView.LayoutParams(100, 55));
btn.setPadding(8, 8, 8, 8);
}
else {
btn = (Button) convertView;
}
btn.setText(filenames[position]);
// filenames is an array of strings
btn.setTextColor(Color.WHITE);
btn.setBackgroundResource(R.drawable.icon);
btn.setId(position);
return btn;
}
}
class MyOnClickListener implements OnClickListener {
private final int position;
public MyOnClickListener(int position) {
this.position = position;
}
public void onClick(View v) {
// Preform a function based on the position
// someFunction(this.position)
Toast.makeText(getApplicationContext(), this.position, Toast.LENGTH_SHORT).show();
}
}
XML:
清单xml:
<?xml version="1.0" encoding="utf-8"?>
知道为什么会崩溃吗?
这是logcat输出:
首先,我建议学习如何调试[参见和示例]。它很快就会变得方便 其次,下次请从logcat添加日志,其中显示导致“强制关闭”的异常的详细信息 关于您的问题,您正在尝试对空对象调用方法:
Button btn = null;
btn.setOnClickListener(new MyOnClickListener(position));
这会导致空指针异常。只有在将对象分配给btn
之后,才应添加侦听器,该对象位于if-else
块之后
还有一件事-您抑制了null
警告(@SuppressWarnings(“null”)
),以避免警告,而不是处理它,这样您就得到了null指针异常。除非你百分之百确定,否则不要忽略警告
编辑:
看看你的清单,这是个小错误。应该是
<activity android:name=".GridViewActivity"
谢谢你的调试教程,我一直在寻找这个东西,它还附带了一个视频,哈哈。至于我修复了您提到的代码,我清楚地看到了为什么我会在该段中出错。修复后,程序仍然崩溃,因此我必须有一些更糟糕的编码。因此,请添加一个logcat日志,以便我们可以查看异常详细信息。由于某种原因,Dalvik似乎找不到您的类(ClassNotFoudException)您可以发布清单XML内容吗?发布在XML清单和布局XML上面仅供参考。谢谢!我最终只是做了一个新的项目,并粘贴了代码,效果很好!
Button btn = null;
btn.setOnClickListener(new MyOnClickListener(position));
<activity android:name=".GridViewActivity"
<activity android:name=".GridviewActivity"