将对象添加到数组对象在android中不起作用
我是Android的新体验。有人能帮我解决这个问题吗? 我想创建一个游戏老虎与牛战斗(这是棋盘游戏)。 我有一个类片段可以设置为Tiger或Cow,我想创建一个类似下面这样的类数组 *注:工件为延伸的ImageView将对象添加到数组对象在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
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