将对象添加到数组对象在android中不起作用

将对象添加到数组对象在android中不起作用,android,arrays,nullpointerexception,Android,Arrays,Nullpointerexception,我是Android的新体验。有人能帮我解决这个问题吗? 我想创建一个游戏老虎与牛战斗(这是棋盘游戏)。 我有一个类片段可以设置为Tiger或Cow,我想创建一个类似下面这样的类数组 *注:工件为延伸的ImageView Piece[] tigers = new Piece[4]; for(int i = 0; i < tigers.length; i++) { tigers[i] = new Piece(context); tigers[i].setType(R.drawa

我是Android的新体验。有人能帮我解决这个问题吗? 我想创建一个游戏老虎与牛战斗(这是棋盘游戏)。 我有一个类片段可以设置为Tiger或Cow,我想创建一个类似下面这样的类数组

*注:工件为延伸的ImageView

Piece[] tigers = new Piece[4];
for(int i = 0; i < tigers.length; i++) {
    tigers[i] = new Piece(context);
    tigers[i].setType(R.drawable.tiger);
}
这是我的MainActivity.java

package com.camitss.klasikou;
import com.camitss.klasikou.R;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

public class MainActivity extends Activity implements OnClickListener{

private LinearLayout llNewGame;
private LinearLayout llInstruction;
private LinearLayout llOption;
private LinearLayout llAbout;
private LinearLayout llCow;
private LinearLayout llTiger;


private RelativeLayout p_new_game;
private RelativeLayout p_instruction;
private GridView p_fighting;
public static ImageAdapter imgAdt;
Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);

    llNewGame = (LinearLayout) findViewById(R.id.l_new_game);
    llNewGame.setOnClickListener(this);

    llInstruction = (LinearLayout) findViewById(R.id.l_instruction);
    llInstruction.setOnClickListener(this);

    llOption = (LinearLayout) findViewById(R.id.l_option);
    llOption.setOnClickListener(this);

    llAbout = (LinearLayout) findViewById(R.id.l_about);
    llAbout.setOnClickListener(this);

    llCow = (LinearLayout) findViewById(R.id.l_cow);
    llCow.setOnClickListener(this);

    llTiger = (LinearLayout) findViewById(R.id.l_tiger);
    llTiger.setOnClickListener(this);


    p_new_game = (RelativeLayout) findViewById(R.id.page_new_game);
    p_instruction = (RelativeLayout) findViewById(R.id.page_instruction);
    p_fighting = (GridView) findViewById(R.id.page_fighting);

    imgAdt = new ImageAdapter(this);

    boardInit();

    p_fighting.setAdapter(imgAdt);
    p_fighting.setGravity(Gravity.CENTER);
}

private void llOff(LinearLayout llNewGame, LinearLayout llInstruction,
        LinearLayout llOption, LinearLayout llAbout) {
    llNewGame.setBackgroundResource(R.drawable.menu_newgame);
    llInstruction.setBackgroundResource(R.drawable.menu_instructions);
    llOption.setBackgroundResource(R.drawable.menu_options);
    llAbout.setBackgroundResource(R.drawable.menu_about);
}

private void wrapInvisible(RelativeLayout p_new_game,
        RelativeLayout p_instruction) {
    p_new_game.setVisibility(View.GONE);
    p_instruction.setVisibility(View.GONE);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if (v.getId() == R.id.page_fighting) {

    }
    if (v.getId() == R.id.l_cow) {
        p_new_game.setVisibility(View.GONE);
        p_fighting.setVisibility(View.VISIBLE);

    }
    if (v.getId() == R.id.l_tiger) {
        p_new_game.setVisibility(View.GONE);
        p_fighting.setVisibility(View.VISIBLE);
    }
    if (v.getId() == R.id.l_new_game) {
        llOff(llNewGame, llInstruction, llOption, llAbout);
        wrapInvisible(p_new_game, p_instruction);
        llNewGame.setBackgroundResource(R.drawable.menu_newgame_on);
        p_new_game.setVisibility(View.VISIBLE);
    }
    if (v.getId() == R.id.l_instruction) {
        llOff(llNewGame, llInstruction, llOption, llAbout);
        wrapInvisible(p_new_game, p_instruction);

        llInstruction.setBackgroundResource(R.drawable.menu_instructions_on);
        p_instruction.setVisibility(View.VISIBLE);
    }
    if (v.getId() == R.id.l_option) {
        llOff(llNewGame, llInstruction, llOption, llAbout);
        llOption.setBackgroundResource(R.drawable.menu_options_on);
    }
    if (v.getId() == R.id.l_about) {
        llOff(llNewGame, llInstruction, llOption, llAbout);
        llAbout.setBackgroundResource(R.drawable.menu_about_on);
    }
}

public void boardInit(){
    Piece[] tigers = new Piece[4];
    for(int i = 0; i < tigers.length; i++) {
        tigers[i] = new Piece(context);
        tigers[i].setType(R.drawable.tiger);
    }
}
}
问题是无法向该数组添加新对象。这有什么问题,我该怎么办

错误:

03-12 10:36:17.376: E/AndroidRuntime(1331): FATAL EXCEPTION: main
03-12 10:36:17.376: E/AndroidRuntime(1331): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.camitss.klasikou/com.camitss.klasikou.MainActivity}: java.lang.NullPointerException
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.ActivityThread.access$600(ActivityThread.java:122)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.os.Looper.loop(Looper.java:137)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.ActivityThread.main(ActivityThread.java:4340)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at java.lang.reflect.Method.invokeNative(Native Method)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at java.lang.reflect.Method.invoke(Method.java:511)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at dalvik.system.NativeStart.main(Native Method)
03-12 10:36:17.376: E/AndroidRuntime(1331): Caused by: java.lang.NullPointerException
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.view.ViewConfiguration.get(ViewConfiguration.java:314)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.view.View.<init>(View.java:2693)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.widget.ImageView.<init>(ImageView.java:104)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at com.camitss.klasikou.Piece.<init>(Piece.java:9)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at com.camitss.klasikou.MainActivity.boardInit(MainActivity.java:134)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at com.camitss.klasikou.MainActivity.onCreate(MainActivity.java:66)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.Activity.performCreate(Activity.java:4465)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
03-12 10:36:17.376: E/AndroidRuntime(1331):     ... 11 more
03-12 10:36:17.376:E/AndroidRuntime(1331):致命异常:main
03-12 10:36:17.376:E/AndroidRuntime(1331):java.lang.RuntimeException:无法启动活动组件信息{com.camits.klasikou/com.camits.klasikou.MainActivity}:java.lang.NullPointerException
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.app.ActivityThread.access$600(ActivityThread.java:122)
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.os.Handler.dispatchMessage(Handler.java:99)上
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.os.Looper.loop(Looper.java:137)
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.app.ActivityThread.main(ActivityThread.java:4340)
03-12 10:36:17.376:E/AndroidRuntime(1331):位于java.lang.reflect.Method.Invokenactive(本机方法)
03-12 10:36:17.376:E/AndroidRuntime(1331):位于java.lang.reflect.Method.invoke(Method.java:511)
03-12 10:36:17.376:E/AndroidRuntime(1331):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-12 10:36:17.376:E/AndroidRuntime(1331):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-12 10:36:17.376:E/AndroidRuntime(1331):在dalvik.system.NativeStart.main(本机方法)
03-12 10:36:17.376:E/AndroidRuntime(1331):由以下原因引起:java.lang.NullPointerException
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.view.ViewConfiguration.get(ViewConfiguration.java:314)
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.view.view.(view.java:2693)
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.widget.ImageView。(ImageView.java:104)
03-12 10:36:17.376:E/AndroidRuntime(1331):位于com.camits.klasikou.Piece.(Piece.java:9)
03-12 10:36:17.376:E/AndroidRuntime(1331):位于com.camits.klasikou.MainActivity.boardInit(MainActivity.java:134)
03-12 10:36:17.376:E/AndroidRuntime(1331):位于com.camits.klasikou.MainActivity.onCreate(MainActivity.java:66)
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.app.Activity.performCreate(Activity.java:4465)上
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
03-12 10:36:17.376:E/AndroidRuntime(1331):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
03-12 10:36:17.376:E/AndroidRuntime(1331):。。。还有11个

在循环中,它应该是
老虎.length()
奶牛.length()

而不是
片段.length
,你忘记了给
上下文提供一个非
null
引用,而且由于
上下文
最终被用于
片段
类的超类中,NPE被扔到了那边。由于您在一个活动中工作,因此请更改您的代码,这样它就可以使用
this
关键字:

public void boardInit(){
    Piece[] tigers = new Piece[4];
    for(int i = 0; i < tigers.length; i++) {
        tigers[i] = new Piece(this);
        tigers[i].setType(R.drawable.tiger);
    }

plz还发布stackTrace,询问Piece.java的第10行在哪里?仔细检查每个循环是否使用了正确的数组长度。是的,我更改了它。非常感谢。所以现在是新的上传。很抱歉,我第一次搞砸了。非常感谢你们A--C,你们所有人都试图帮助解决我的问题。我现在明白了。:)
03-12 10:36:17.376: E/AndroidRuntime(1331): FATAL EXCEPTION: main
03-12 10:36:17.376: E/AndroidRuntime(1331): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.camitss.klasikou/com.camitss.klasikou.MainActivity}: java.lang.NullPointerException
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.ActivityThread.access$600(ActivityThread.java:122)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.os.Looper.loop(Looper.java:137)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.ActivityThread.main(ActivityThread.java:4340)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at java.lang.reflect.Method.invokeNative(Native Method)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at java.lang.reflect.Method.invoke(Method.java:511)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at dalvik.system.NativeStart.main(Native Method)
03-12 10:36:17.376: E/AndroidRuntime(1331): Caused by: java.lang.NullPointerException
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.view.ViewConfiguration.get(ViewConfiguration.java:314)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.view.View.<init>(View.java:2693)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.widget.ImageView.<init>(ImageView.java:104)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at com.camitss.klasikou.Piece.<init>(Piece.java:9)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at com.camitss.klasikou.MainActivity.boardInit(MainActivity.java:134)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at com.camitss.klasikou.MainActivity.onCreate(MainActivity.java:66)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.Activity.performCreate(Activity.java:4465)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
03-12 10:36:17.376: E/AndroidRuntime(1331):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
03-12 10:36:17.376: E/AndroidRuntime(1331):     ... 11 more
public void boardInit(){
    Piece[] tigers = new Piece[4];
    for(int i = 0; i < tigers.length; i++) {
        tigers[i] = new Piece(this);
        tigers[i].setType(R.drawable.tiger);
    }
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    context = this; //add this line