#android #view #nullpointerexception #drawable #getresource
#Android #Вид #исключение nullpointerexception #можно рисовать #getresource
Вопрос:
Я хочу создать класс объектов с помощью метода рисования из запроса ресурса изображения в представлении приложения Android. У меня есть 3 файла Java :
Balle.java :
package com.example.balle;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
public class Balle extends Activity {
float radius = 75; // Radius of the Bubble
float x = radius 20; // Center of the Bubble (x,y)
float y = radius 40;
Context context = BalleView.GlobalContext;
Resources res = context.getResources();
// Constructor
public Balle() {
}
public void draw(Canvas canvas) {
// show objet from the image
Bitmap monImage = BitmapFactory.decodeResource(res, R.drawable.bubble);
canvas.drawBitmap(monImage, x-radius, y-radius, null);
}
}
BalleView.java :
package com.example.balle;
import com.example.balle.Balle;
import android.content.Context;
import android.graphics.Canvas;
import android.view.View;
public class BalleView extends View {
private Balle ball;
public static Context GlobalContext = null;
// Constructor
public BalleView(Context context) {
super(context);
ball = new Balle();
}
@Override
protected void onDraw(Canvas canvas) {
// draw the bubble
// show objet from the image
ball.draw(canvas);
}
}
MainActivity.java :
package com.example.balle;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View BalleView = new BalleView(this);
setContentView(BalleView);
BalleView.setBackgroundColor(Color.WHITE);
}
}
Как мой ресурс изображения в res / drawable :
bubble.png
У меня есть сообщение об ошибке нулевого указателя на консоли :
08-09 04:05:14.791: D/AndroidRuntime(1232): Shutting down VM
08-09 04:05:14.791: W/dalvikvm(1232): threadid=1: thread exiting with uncaught exception (group=0xb4a81ba8)
08-09 04:05:14.851: E/AndroidRuntime(1232): FATAL EXCEPTION: main
08-09 04:05:14.851: E/AndroidRuntime(1232): Process: com.example.balle, PID: 1232
08-09 04:05:14.851: E/AndroidRuntime(1232): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.balle/com.example.balle.MainActivity}: java.lang.NullPointerException
08-09 04:05:14.851: E/AndroidRuntime(1232): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
08-09 04:05:14.851: E/AndroidRuntime(1232): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
08-09 04:05:14.851: E/AndroidRuntime(1232): at android.app.ActivityThread.access$800(ActivityThread.java:135)
08-09 04:05:14.851: E/AndroidRuntime(1232): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
08-09 04:05:14.851: E/AndroidRuntime(1232): at android.os.Handler.dispatchMessage(Handler.java:102)
08-09 04:05:14.851: E/AndroidRuntime(1232): at android.os.Looper.loop(Looper.java:136)
08-09 04:05:14.851: E/AndroidRuntime(1232): at android.app.ActivityThread.main(ActivityThread.java:5001)
08-09 04:05:14.851: E/AndroidRuntime(1232): at java.lang.reflect.Method.invokeNative(Native Method)
08-09 04:05:14.851: E/AndroidRuntime(1232): at java.lang.reflect.Method.invoke(Method.java:515)
08-09 04:05:14.851: E/AndroidRuntime(1232): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
08-09 04:05:14.851: E/AndroidRuntime(1232): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
08-09 04:05:14.851: E/AndroidRuntime(1232): at dalvik.system.NativeStart.main(Native Method)
08-09 04:05:14.851: E/AndroidRuntime(1232): Caused by: java.lang.NullPointerException
08-09 04:05:14.851: E/AndroidRuntime(1232): at com.example.balle.Balle.<init>(Balle.java:15)
08-09 04:05:14.851: E/AndroidRuntime(1232): at com.example.balle.BalleView.<init>(BalleView.java:16)
08-09 04:05:14.851: E/AndroidRuntime(1232): at com.example.balle.MainActivity.onCreate(MainActivity.java:13)
08-09 04:05:14.851: E/AndroidRuntime(1232): at android.app.Activity.performCreate(Activity.java:5231)
08-09 04:05:14.851: E/AndroidRuntime(1232): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-09 04:05:14.851: E/AndroidRuntime(1232): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
08-09 04:05:14.851: E/AndroidRuntime(1232): ... 11 more
Спасибо за помощь.
Я использовал отладчик, и я думаю, что код и ресурсы исправлены, но у него были некоторые связанные файлы / папки моей IDE Eclipse, которые неправильно настроены. У меня было 2 предупреждения :
Ошибка: BaseDexClassLoader.class > Редактор файлов классов> Источник не найден
Ошибка: ActivityThread; performLaunchActivity(ActivityThread $ ActivityClientRecord, намерение)> Источник не найден> Изменить путь поиска источника…
У меня был «Android.jar » файл, но я не знаю, как присоединить исходный код к моему проекту в Eclipse.
Спасибо за помощь
PS: Конечная цель — переместить изображение пузырька на экране.
Комментарии:
1. Есть идеи?
2. Я установил «Java Source Attacher» из marketplace Eclipse, но в правой части android.jar и android-support-v4.jar чтобы прикрепить источник, у меня появилось сообщение об ошибке: Местоположение источника библиотеки> извините, но исходный код не может быть найден в нашей базе данных. Вы можете помочь сообществу, указав URL-адрес архива исходного кода ниже.
Ответ №1:
Отладчик не может быть запущен с точкой останова для класса. Файл «Android.jar » должен быть связан с папкой Android sdk «sources».
Наконец, я добавляю «import com.example.balle.BalleView» в MainActivity.java . И файловый файл.java для этого не требуется BalleView.java :
package com.example.balle;
import com.example.balle.Balle;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;
public class BalleView extends View {
public static Context GlobalContext = null;
private Paint paint;
// Constructor
public BalleView(Context context) {
super(context);
paint = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
// show objet from the image
Bitmap monImage = BitmapFactory.decodeResource(getResources(), R.drawable.bubble);
canvas.drawBitmap(monImage, 40, 40, paint);
}
}