Re: [android-developers] Create an object class but error
I've passed the code when I add player = new MyPlayer() in onCreate. but next step, I change it to array:
MyPlayer[] players;
.
.
.
.
onCreate....
players = new MyPlayer[4];
then it also NPE. why it pass when I use single player but use array do not pass?
== full code in main activity====
package hktsang56.android.mjhelper;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class name_input extends Activity {
final static int NUM_PLAYER = 4;
private MyPlayer[] players;
MyPlayer player;
MarkSetting markSetting;
private EditText[] namesET;
Button bt[];
private TextView tv;
int[] names = new int[]{
R.id.et_p1,
R.id.et_p2,
R.id.et_p3,
R.id.et_p4
};
int[] btIds = new int[]{
R.id.but_sendName,
R.id.but_clearName
};
final static int NUM_PLAYER = 4;
private MyPlayer[] players;
MyPlayer player;
MarkSetting markSetting;
private EditText[] namesET;
Button bt[];
private TextView tv;
int[] names = new int[]{
R.id.et_p1,
R.id.et_p2,
R.id.et_p3,
R.id.et_p4
};
int[] btIds = new int[]{
R.id.but_sendName,
R.id.but_clearName
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.player_input);
players = new MyPlayer[NUM_PLAYER];
namesET = new EditText[NUM_PLAYER];
bt = new Button[btIds.length];
player = new MyPlayer();
tv = (TextView) findViewById(R.id.tv_monitor);
tv.setText("onCreate");
initButIds();
}
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.player_input);
players = new MyPlayer[NUM_PLAYER];
namesET = new EditText[NUM_PLAYER];
bt = new Button[btIds.length];
player = new MyPlayer();
tv = (TextView) findViewById(R.id.tv_monitor);
tv.setText("onCreate");
initButIds();
}
private void initButIds(){
for (int i=0; i<btIds.length; i++){
bt[i] = (Button) findViewById(btIds[i]);
bt[i].setOnClickListener(myClickListener);
tv.setText("initButIds");
}
}
for (int i=0; i<btIds.length; i++){
bt[i] = (Button) findViewById(btIds[i]);
bt[i].setOnClickListener(myClickListener);
tv.setText("initButIds");
}
}
private View.OnClickListener myClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText("onClick");
but_click(v.getId());
}
};
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText("onClick");
but_click(v.getId());
}
};
public void but_click(int btId){
switch (btId){
case R.id.but_sendName:
tv.setText("but_click");
setName();
break;
case R.id.but_clearName:
clearName();
break;
}
}
switch (btId){
case R.id.but_sendName:
tv.setText("but_click");
setName();
break;
case R.id.but_clearName:
clearName();
break;
}
}
private void setName() {
// TODO Auto-generated method stub
String name="Null";
for (int i=0; i<NUM_PLAYER; i++){
namesET[i] = (EditText) findViewById(names[i]);
}
for (int i=0; i<NUM_PLAYER; i++){
name = namesET[i].getText().toString().trim();
players[i].setPlayerName(name); // remark: player.setPlayerName(name); <------------ can be run.
}
tv.setText(players[2].getPlayerName());
}
// TODO Auto-generated method stub
String name="Null";
for (int i=0; i<NUM_PLAYER; i++){
namesET[i] = (EditText) findViewById(names[i]);
}
for (int i=0; i<NUM_PLAYER; i++){
name = namesET[i].getText().toString().trim();
players[i].setPlayerName(name); // remark: player.setPlayerName(name); <------------ can be run.
}
tv.setText(players[2].getPlayerName());
}
private void clearName() {
// TODO Auto-generated method stub
for (int i=0; i<NUM_PLAYER; i++){
namesET[i].setText("");
}
}
// TODO Auto-generated method stub
for (int i=0; i<NUM_PLAYER; i++){
namesET[i].setText("");
}
}
}
On Wed, May 23, 2012 at 6:29 PM, Daniel Drozdzewski <daniel.drozdzewski@gmail.com> wrote:
Jason
name == null
would not cause NPE, as it is simple assignment to a member variable
in MyPlayer class. If there was anything else within setName() that
caused NPE, we could see it on the top of the stacktrace.
The cause is that *player* reference in *player_input.setName()* is null.
The way player object is being constructed is wrong: (player = new
Player;) This code should not compile, so it begs the question, how
did the OP manage to run it.
There are many other issues with this code from the first look, like
naming conventions, and auto generated comments dotting it, just to
name the few.
Daniel
--
On 23 May 2012 10:56, Jason Teagle <teagle.jason@gmail.com> wrote:
>> I've create an object class but it cannot work. any mistake of my code?
>
>
>> private void setName() {
>> // TODO Auto-generated method stub
>> getNameText();
>> for (int i=0; i<NUM_PLAYER; i++){
>> player.setPlayerName(name); // name is a String get from EditText by some
>> code before
>> }
>> }
>
>
>> when I run the programme, it have the following error code:
>
>
>> 05-23 09:24:35.115: E/AndroidRuntime(438): java.lang.NullPointerException
>> 05-23 09:24:35.115: E/AndroidRuntime(438): at hktsang56.android.mjhelper
>> .name_input.setName(name_input.java:81)
>
>
> Which of the lines in your source code is line 81? Is it the line that says
> getNameText()? We need to see that method's definition, if that is the case,
> since I can't see any other problem (if 'name' were coming out null, then
> the error would be in setPlayerName() rather than in setName() - in fact it
> probably wouldn't generate an error in such a case).
>
> Show us the code for getNameText(). You are possibly trying to access a
> control that you have not filled out correctly.
>
>
>
>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to android-developers@googlegroups.com
> To unsubscribe from this group, send email to
> android-developers+unsubscribe@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
Daniel Drozdzewski
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--
HK Tsang
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home