Ошибка on a null object reference
-
- Сообщения: 8
- Зарегистрирован: 20 авг 2015, 10:17
Ошибка on a null object reference
Здравствуйте. 2 раза сталкивался со следующей ошибкой при запуске приложения: Attempt to write to field (далее путь к объекту) on a null object reference. В действии может быть не обязательно запись (Write), первый раз было Attempt invoke virtual method... Главное вторая часть (on a null object reference) ссылка на какой-то нулевой объект. В первый раз помогло создание нового проекта и просто копирование кода из старого в новый, ничего не меня и все заработало. Сейчас это не помогает. В интернете есть много тем с такой же проблемой на английском. Почитал, но мне так и не помогло. Сам перепробовал все что мог. Может ли кто-нибудь объяснить что это за on a null object reference и как с ним бороться???
Re: Ошибка on a null object reference
Что-то разрушается, пока вы делаете трудоёмкую задачу. Может Активность убивается?
-
- Сообщения: 8
- Зарегистрирован: 20 авг 2015, 10:17
Re: Ошибка on a null object reference
Сам этот проблемный объект известен, это переменная типа float в одном из классов, в этом же классе есть метод, который присваивает этой переменной значение. В main классе я вызываю этот метод передаю ему на вход значение и вот тут и вылазит эта ошибка. Выполнение программы прекращается как только она доходит до этого метода. Как только я начинаю производить какие-нибудь действия с этой проблемной переменной так все не работает. Если закомментировать любые действия с этой переменной, то все работает. Переменная объявленна, почему она является этим нулевым объектом из-за которого не запускается приложение, я не могу понять.An-droid писал(а):Что-то разрушается, пока вы делаете трудоёмкую задачу. Может Активность убивается?
Re: Ошибка on a null object reference
Код бы глянуть.
-
- Сообщения: 8
- Зарегистрирован: 20 авг 2015, 10:17
Re: Ошибка on a null object reference
An-droid писал(а):Код бы глянуть.
Код: Выделить всё
package ru.p01startandroid.p02figure;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Path.Direction;
import android.view.View;
import android.util.AttributeSet;
public class PathView extends View {
private Shape shape;
public float ratioRadius;
public PathView(Context context) {
super(context);
init();
}
public PathView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public PathView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public void init(){
shape = new Shape();
}
public void onDraw(Canvas canvas) {
canvas.drawARGB(80, 102, 204, 255);
int width = getWidth();
int height = getHeight();
if (width == 0 || height == 0) {
return;
}
float x = (float) width / 2.0f;
float y = (float) height / 2.0f;
float radius;
if (width > height) {
radius = height * ratioRadius;
} else {
radius = width * ratioRadius;
}
shape.setCircle(x, y, radius, Direction.CW);
canvas.drawPath(shape.getPath(), shape.getPaint());
}
public void setShapeRatioRadius(float ratio) {
ratioRadius = ratio;
}
}
класс Main
Код: Выделить всё
public class MainActivity extends Activity implements SeekBar.OnSeekBarChangeListener {
private PathView pathView;
private SeekBar seekBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
seekBar = (SeekBar) findViewById(R.id.seekBar);
pathView = new PathView(this);
//pathView = (PathView)findViewById(R.id.pathView);
float defaultRatio = (float) (seekBar.getProgress()) / (float) (seekBar.getMax());
pathView.setShapeRatioRadius(defaultRatio);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
float defaultRatio = (float) (seekBar.getProgress()) / (float) (seekBar.getMax());
/* pathView.setShapeRatioRadius(defaultRatio);
pathView.invalidate();*/
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
}
Re: Ошибка on a null object reference
Тут либо проблема с тем, что не отправляется контекст, и тогда в строке
pathView = new PathView(this); нужно вместо this написать getApplicationContext()
либо где то переменная используется, например при построении фигуры shape = new Shape() и тогда
нужно инициализировать ratioRadius сразу в конструкторе, при создании объекта, тем более что значение уже известно.
вместо
сделать
Возможно
pathView = new PathView(this); нужно вместо this написать getApplicationContext()
либо где то переменная используется, например при построении фигуры shape = new Shape() и тогда
нужно инициализировать ratioRadius сразу в конструкторе, при создании объекта, тем более что значение уже известно.
вместо
Код: Выделить всё
pathView = new PathView(this);
float defaultRatio = (float) (seekBar.getProgress()) / (float) (seekBar.getMax());
Код: Выделить всё
float defaultRatio = (float) (seekBar.getProgress()) / (float) (seekBar.getMax());
pathView = new PathView(this, defaultRatio);
-
- Сообщения: 8
- Зарегистрирован: 20 авг 2015, 10:17
Re: Ошибка on a null object reference
И в правду проблема с конструктором new Path(this). Почему-то не работает с ним. Буду разбираться с ним. Спасибо за помощь, а то я уже 2-ой день сижу в код смотрю, который должен работать=)