Android空指针异常-我可以';我不明白为什么
我不知道为什么会出现空指针异常。这是我第一次发帖,这意味着全世界都能得到任何反馈。我已经在互联网上研究了一段时间,但不能指出哪里出了问题。我对面向对象编程相当陌生,因此我非常感谢您在这方面的帮助。提前谢谢 这是全彩色网格类Android空指针异常-我可以';我不明白为什么,android,pointers,exception,null,Android,Pointers,Exception,Null,我不知道为什么会出现空指针异常。这是我第一次发帖,这意味着全世界都能得到任何反馈。我已经在互联网上研究了一段时间,但不能指出哪里出了问题。我对面向对象编程相当陌生,因此我非常感谢您在这方面的帮助。提前谢谢 这是全彩色网格类 package au.edu.holmesglen.mswemmer.gridviewdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import an
package au.edu.holmesglen.mswemmer.gridviewdemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
import java.util.Random;
public class ColorGrid extends AppCompatActivity {
GridView gridview;
Item[] gridArray = new Item[16];
ImageAdapter iAdapter;
int columncount = 4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_color_grid);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// generate 4x4 array with all items in the grid set to the grey image
for(int i = 0; i< 16; i++){
gridArray[i] = new Item(R.drawable.grey, "grey");
Log.v("MyApp","GRID CREATED!!!!!");
}
//use the ImageAdapter to pass the array to the GridView object
GridView grid = (GridView) findViewById(R.id.gridview);
iAdapter = new ImageAdapter(this, gridArray);
grid.setAdapter(iAdapter);
//everytime an Item is clicked call the nextColor method to change to a different image
grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
int x = position / columncount;
int y = position % columncount;
int c = gridArray[position].nextColor();
checkForWin();
((ImageView)v).setImageResource(c);
Toast.makeText(getApplicationContext(), x + " " + y,
Toast.LENGTH_SHORT).show();
}
});
}
private void checkForWin() {
Log.d("MyApp","HELLO!!!!!");
for (int i = 0; i < 16; i += 4) {
// Check for blue
if ((gridArray[i].getColor() == R.drawable.blue
&& gridArray[i + 1].getColor() == R.drawable.blue
&& gridArray[i + 2].getColor() == R.drawable.blue)
|| (gridArray[i + 1].getColor() == R.drawable.blue
&& gridArray[i + 2].getColor() == R.drawable.blue
&& gridArray[i + 3].getColor() == R.drawable.blue))
{
Toast.makeText(getApplicationContext(),
"THREE WHITE IN A ROW HORIZONTALLY", Toast.LENGTH_SHORT)
.show();
Log.d("MyApp", "3 in row horizontally BLUE");
}
// Check for green
if ((gridArray[i].getColor() == R.drawable.green
&& gridArray[i + 1].getColor() == R.drawable.green
&& gridArray[i + 2].getColor() == R.drawable.green)
|| (gridArray[i + 1].getColor() == R.drawable.green
&& gridArray[i + 2].getColor() == R.drawable.green
&& gridArray[i + 3].getColor() == R.drawable.green))
{
Toast.makeText(getApplicationContext(),
"THREE RED IN A ROW HORIZONTALLY", Toast.LENGTH_SHORT)
.show();
Log.d("MyApp", "3 in row horizontally GREEN");
}
}
// Check for vertical loss
for (int i = 0; i <= 7; i++) {
/*
* This for loop is looping through each column and checking if 3 drawables are in a row
*/
//Check for blue loss
if (gridArray[i].getColor() == R.drawable.blue
&& gridArray[i + 4].getColor() == R.drawable.blue
&& gridArray[i + 8].getColor() == R.drawable.blue)
{
Toast.makeText(getApplicationContext(),
"THREE WHITE IN A ROW VERTICALLY", Toast.LENGTH_SHORT).show();
Log.d("MyApp", "3 in row vertically BLUE");
}
//Check for green loss
if (gridArray[i].getColor() == R.drawable.green
&& gridArray[i + 4].getColor() == R.drawable.green
&& gridArray[i + 8].getColor() == R.drawable.green) {
Toast.makeText(getApplicationContext(),
"THREE RED IN A ROW VERTICALLY", Toast.LENGTH_SHORT).show();
Log.d("MyApp", "3 in row vertically GREEN");
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_color_grid, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
已编辑
@MrSwemmer您是否仔细检查了gridview的id是否与此处的相同?它可以是另一个gridview的id(如果存在于另一个布局中) 错误来自活动
ColorGrid。类请查看第45行的代码。
或者在此处发布活动的代码根据@MrSwemmer的评论,有问题的行是grid.setAdapter(iAdapter)
。
请检查GridView grid=(GridView)findviewbyd(R.id.GridView)
并确保视图id=“gridview”
确实存在
在第45行之前添加以下调试代码进行验证:
如果(grid==null)Log.d(“grid”,“null”);
如果(iAdapter==null)Log.d(“适配器”,“null”);
else Log.d(“All”、“Good”);
从ColorGrid.java发布相关代码:45@SatanPandeya您发布的链接询问了一般意义上的空指针异常。这个问题特定于给定的用例。我看不出这是一个重复的问题。感谢您回复我,我更新了它,以查看完整的类。第45行是:grid.setAdapter(iAdapter);grid.setAdapter(iAdapter)是第45行,谢谢,我已经为此挠头好一阵子了我不知道问题出在哪里,为什么适配器会导致空值exception@MrSwemmer您是否仔细检查了gridview的id是否与此处的相同?它可以是另一个gridview的id(如果存在于另一个布局中)很好用!!!谢谢,你们是对的!我引用了另一个xml文件中的网格。很抱歉,我是新来的,非常感谢你们的帮助Android:id=“@+id/gridview”谢谢你们看这个,id是“gridview”,这不是问题。你们能不能把下面的代码放在第45行之前,看看结果`if(grid==null)Log.d(“网格”)“,”NULL);else if(iAdapter==NULL)Log.d(“适配器”,“NULL”);else Log.d(“全部”,“好”);`@MrSwemmer请接受这一正确答案。谢谢。
08-23 18:00:46.219 7772-7772/au.edu.holmesglen.mswemmer.gridviewdemo E/AndroidRuntime: FATAL EXCEPTION: main
Process: au.edu.holmesglen.mswemmer.gridviewdemo, PID: 7772
java.lang.RuntimeException: Unable to start activity ComponentInfo{au.edu.holmesglen.mswemmer.gridviewdemo/au.edu.holmesglen.mswemmer.gridviewdemo.ColorGrid}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2439)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495)
at android.app.ActivityThread.access$800(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5633)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:896)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:712)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at au.edu.holmesglen.mswemmer.gridviewdemo.ColorGrid.onCreate(ColorGrid.java:45)
at android.app.Activity.performCreate(Activity.java:5312)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2395)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495)
at android.app.ActivityThread.access$800(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5633)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:896)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:712)
at dalvik.system.NativeStart.main(Native Method)