Приложение неожиданно остановилось. Попробуйте еще раз

#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, который устанавливается при создании. }