【问题标题】:Android Null pointer Exception - I can't understand why [duplicate]Android空指针异常-我不明白为什么[重复]
【发布时间】:2017-08-23 08:14:52
【问题描述】:

我不知道为什么会出现空指针异常。这是我第一次发帖,这将意味着世界得到任何反馈。我已经在互联网上研究了一段时间,但无法指出问题所在。我对面向对象编程相当陌生,所以我非常感谢任何帮助。提前致谢。

这是全彩色网格类

    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);
    }


}

这是我的日志

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) 

【问题讨论】:

  • 从 ColorGrid.java:45 发布相关代码
  • @SatanPandeya 您发布的链接询问一般意义上的空指针异常。这个问题特定于给定的用例。我看不出这是怎么重复的。

标签: android pointers exception null


【解决方案1】:

已编辑

@MrSwemmer 你有没有仔细检查过 gridview 的 id 和放在这里的一样吗?它可以是另一个 gridview 的 id(如果存在于另一个布局中)

错误来自活动ColorGrid.class,请参见第 45 行的代码。 或在此处发布代码以进行活动

【讨论】:

  • 感谢您回复我,我更新了它,以查看完整的课程。第 45 行是 :grid.setAdapter(iAdapter);
  • grid.setAdapter(iAdapter) 是第 45 行,谢谢,这件事让我摸不着头脑
  • 仍然不知道问题是什么,为什么适配器会导致空异常
  • @MrSwemmer 你有没有仔细检查过gridview的id和放在这里的一样吗?它可以是另一个gridview的id(如果存在于另一个布局中)
  • 它工作!谢谢你们,你们是对的!我在不同的 xml 文件中引用了一个网格。对不起,我是新手,非常感谢您的帮助
【解决方案2】:

根据@MrSwemmer 的评论,有问题的行是grid.setAdapter(iAdapter)。 请检查GridView grid = (GridView) findViewById(R.id.gridview); 并确保视图id = "gridview" 确实存在。

在第 45 行之前添加以下调试代码进行验证: if(grid==null) Log.d("GRID","NULL); else if(iAdapter==null)Log.d("Adapter","null"); else Log.d("All","Good");

【讨论】:

  • android:id="@+id/gridview" 感谢您查看此内容,id 是“gridview”,这不是问题。
  • 你能不能把下面的代码放在第 45 行之前看看结果` if(grid==null) Log.d("GRID","NULL); else if(iAdapter==null)Log .d("适配器","null"); 否则 Log.d("All","Good");`
  • @MrSwemmer 请接受这个作为正确答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
相关资源
最近更新 更多