#android #nullpointerexception
#Android #исключение nullpointerexception
Вопрос:
Приложение будет работать нормально, если я не добавлю следующий код.
public class TFView extends View{
private Paint p;
private ArrayList<Orb> O1;
/** Called when the activity is first created. */
public TFView (Context context){
super(context);
O1=new ArrayList<Orb>();
p = new Paint();
int Orby=0;
for(int j=0; j<3; j ){
int Orbx= 0;
for(int i=0; i<4; i )
{
O1.add(new Orb(Orbx,Orby,true));
Orbx = 40;
}
Orby = 40;
}
}
@Override
protected void onDraw(Canvas canvas) {
for(Orb t:O1){
canvas.drawOval(t.drawOrb(), p);
}
p.setColor(Color.BLUE);
canvas.drawText(String.valueOf(main.getx()), 50, 50, p);
canvas.drawText(String.valueOf(main.gety()), 50, 80, p);
canvas.drawText(String.valueOf(O1.size()), 50, 110, p);
try {
Thread.sleep(30);
} catch (InterruptedException e) { }
invalidate();
}
}
Итак, я полагаю, что моя проблема как-то связана с тем, что Android не принимает мой Arraylist. Я запустил очень похожий код на это на своем компьютере, но что-то в Android, похоже, не хочет его принимать. Вот мой класс Orb, который используется в моем Arraylist.
import android.graphics.RectF;
public class Orb {
static int orbx;
static int orby;
public int size;
static RectF button;
boolean display;
public Orb(){
orbx=0;
orby=0;
display=false;
}
public Orb(int x, int y, boolean d){
orbx=x;
orby=y;
display=true;
}
public RectF drawOrb(){
button.set(orbx, orby,orbx 30, orby 30);
return button;
}
}
Итак, почему Android не принимает мои чертежи Arraylist? Спасибо за вашу помощь.
Редактировать: Итак, я исправил свою проблему с нулевым значением кнопки с помощью следующего кода public RectF drawOrb(){
button.set(orbx, orby,orbx 30, orby 30);
if(button!=null)
return button;
else
return b;
}
Теперь я получаю несколько исключений с нулевым указателем, которые выглядят следующим образом
[2011-04-23 22:31:25 - ddms]null
java.lang.NullPointerException
at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
at com.android.ddmlib.Client.sendAndConsume(Client.java:574)
at com.android.ddmlib.HandleHello.sendHELO(HandleHello.java:142)
at com.android.ddmlib.HandleHello.sendHelloCommands(HandleHello.java:65)
at com.android.ddmlib.Client.getJdwpPacket(Client.java:671)
at com.android.ddmlib.MonitorThread.processClientActivity(MonitorThread.java:317)
at com.android.ddmlib.MonitorThread.run(MonitorThread.java:263)
Еще раз спасибо
Комментарии:
1. Не могли бы вы, пожалуйста, предоставить трассировку стека ошибки, которая завершает работу вашего приложения (вы можете использовать `adb logcat’ для чтения системного журнала)?
2. Я понятия не имею, что искать. Вот что оно отобразило textbin.com/d3682
3. Вы неправильно читаете недавно отредактированный вывод. Это не трассировка стека из-за ошибки в вашем приложении. Это трассировка стека из самого DDMS.
4. Хорошо, я думаю, что понимаю. Но я все еще не понимаю, почему значение button равно null. Он по-прежнему говорит, что кнопка равна нулю с этими ошибками из трассировки стека E / AndroidRuntime (872): на com.djrobotfreak. Think_Fast.Orb.drawOrb(Orb.j ava:28) E / AndroidRuntime (872): на com.djrobotfreak. Think_Fast. TFView.onDraw(TFV iew.java: 130)
5. Этими двумя строками являются {a} кнопка.set(button.set(orbx, orby,orbx 30, orby 30); и {b} canvas.drawOval(т.drawOrb(), p);
Ответ №1:
E/AndroidRuntime( 312): java.lang.NullPointerException
E/AndroidRuntime( 312): at com.djrobotfreak.Think_Fast.Orb.drawOrb(Orb.java:26)
У вас есть NullPointerException
в строке 26 Orb.java
. Основываясь на ваших списках, это может показаться:
button.set(orbx, orby,orbx 30, orby 30);
Если это так, button
равно нулю.
Комментарии:
1. Ну, если бы это было правдой, то это исправило бы это правильно public RectF drawOrb(){ button.set(orbx, orby, orbx 30, orby 30); if(button!=null) return button; else return b;// b — это другой RectF, который устанавливается при создании. }