Имеется два класса - основной и для рисования. При запуске определенного алгоритма, происходит поиск координаты нужной точки, а затем координаты передаются в класс рисования, и класс рисует точку. Но почему то не могу изменить поле для хранения координат в классе рисования.
Причем в основном классе реализован обработчик касания, который получает координаты нажатия на экран и рисует прямоугольник, там происходит также изменение полей класса DrawView, но без всяких ошибок.
Ошибка:
Process: com.example.vitalja.stars, PID: 27911
java.lang.NullPointerException: Attempt to write to field 'int com.example.vitalja.stars.DrawView.x_draw' on a null object reference
at com.example.vitalja.stars.MainActivity.findAlgorithm(MainActivity.java:180)
at com.example.vitalja.stars.MainActivity.decodeYUV420SP(MainActivity.java:219)
at com.example.vitalja.stars.ShowCamera.onPreviewFrame(ShowCamera.java:110)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1188)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5451)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
MainActivity:
public class MainActivity extends AppCompatActivity {
DrawView drawView;
....
protected void onCreate(Bundle savedInstanceState) {
....
drawView = findViewById(R.id.drawViewID);
....
}
public void findAlgorithm(int[] rgb, int width, int height) {
Log.d("My Algorithm", "surface_algh");
int color_red, color_green, color_blue, curr_color, index;
double tmp_GR;
int x = X_touch + 50;
int y = Y_touch + 50;
index = (height * y) + x;
curr_color = rgb[index];
color_green = Color.green(curr_color);
color_red = Color.red(curr_color);
color_blue = Color.blue(curr_color);
tmp_GR = (0.299 * color_red) + (0.587 * color_green) + (0.114 * color_blue);
if (tmp_GR > max_GR) {
max_GR = tmp_GR;
max_brightness_X = x;
max_brightness_Y = y;
}
drawView.x_point = max_brightness_X;
drawView.y_point = max_brightness_Y;
drawView.draw_point = 1;
drawView.invalidate();
}
}
DrawView
public class DrawView extends View {
Paint p;
ShowCamera showCamera;
public int x_draw, y_draw;
public int x_point, y_point;
public int draw_state = 0;
public int draw_point = 0;
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DrawView (Context context){
super (context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setStrokeWidth(10);
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.STROKE);
Paint paint_dot = new Paint();
paint_dot.setStrokeWidth(10);
paint_dot.setColor(Color.RED);
if (draw_state == 1) {
canvas.drawRect(x_draw, y_draw, x_draw + 100, y_draw + 100, paint);
}
if (draw_point == 1){
canvas.drawPoint(x_point, y_point, paint_dot);
}
}
}
ShowCamera.onPreviewFrame
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
if (scanSpace) {
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.d("surfaceface", "surface onpreviewframe");
int frameHeight = camera.getParameters().getPreviewSize().height;
int frameWidth = camera.getParameters().getPreviewSize().width;
// number of pixels//transforms NV21 pixel data into RGB pixels
int rgb[] = new int[frameWidth * frameHeight];
mainActivity.decodeYUV420SP(rgb, data, frameWidth, frameHeight, startX, startY);
}
}
Из MainActivity Вызов активности:
public void btnTrackingOnClick(View view) {
if (!isTracking){
isTracking = true;
showCamera.scanSpace = true;
btn_tracking.setText("Прекратить");
}
else {
isTracking = false;
showCamera.scanSpace = false;
btn_tracking.setText("Отследить");
}
}
x_drawне инициализирован – Jarvis_J Jan 28 '19 at 11:22findAlgorithmдолжна быть запись в полеDrawView.x_draw. Сделайте пересборку проекта (Build -> Rebuild project) и попробуйте ещё. – woesss Jan 28 '19 at 11:35ShowCamera.onPreviewFrameпокажите и как в этом классе получена ссылка на активность. – woesss Jan 28 '19 at 12:17mainActivityв этом классе - передана или создана черезnew? – woesss Jan 28 '19 at 12:39