У меня была проблема при попытке получить изображение из файла с возможностью рисования и изменить его размер и нанести на карту. Вот код:NullPointerException при получении изображения из выпадающей папки и изменении размера
final Drawable d = EventDrawableImage.resizeCurrentLocImage("current_loc",
context);
for (int iii = 0; iii < pathGeometries.size(); iii++) {
final int counter = iii ;
EventDetail.handler.postDelayed(new Runnable()
{
private long time = 0;
public void run()
{
time += 1000;
EventDetail.handler.postDelayed(this, 1000);
moveNext(pathGeometries.get(counter).getX(),
pathGeometries.get(counter).getY(), 0, d);
}
}, 1000);
}
И в моем MoveNext() метод, я черчения маркер на карте:
public static void moveNext(double coordx, double coordy, int k, Drawable d){
// Set center
Point p = new Point(coordx, coordy);
EventMain.mMapView.zoomToResolution(p, 1);
// Add marker
PictureMarkerSymbol graphicIcon;
graphicIcon = new PictureMarkerSymbol(d);
Symbol symbol = graphicIcon;
HashMap<String, Object> attrMap = new HashMap<String, Object>();
attrMap.put("currentLoc", "User Current location");
EventMain.graphicsLayer.addGraphic(new Graphic(p, symbol, attrMap));
}
И мой resizeCurrentLoc() метод:
public static Drawable resizeCurrentLocImage(String locPic, Context context) {
String uri = "@drawable/" + locPic;
int imageResource = context.getResources().getIdentifier(uri, null,
context.getPackageName());
Drawable res = context.getResources().getDrawable(imageResource);
Bitmap bitmap = ((BitmapDrawable) res).getBitmap();
Drawable d = new BitmapDrawable(context.getResources(),
Bitmap.createScaledBitmap(bitmap, 40, 40, true));
return d;
}
Я могу использовать возвращаемый чертеж и нанести его на карту другими функциями, но не этим. Я подозреваю, что это было из-за обработчика. Сообщение об ошибке как трассировка стека:
01-17 19:44:27.568: E/AndroidRuntime(5886): FATAL EXCEPTION: AsyncTask #5
01-17 19:44:27.568: E/AndroidRuntime(5886): java.lang.RuntimeException: An error occured while executing doInBackground()
01-17 19:44:27.568: E/AndroidRuntime(5886): at android.os.AsyncTask$3.done(AsyncTask.java:278)
01-17 19:44:27.568: E/AndroidRuntime(5886): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
01-17 19:44:27.568: E/AndroidRuntime(5886): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
01-17 19:44:27.568: E/AndroidRuntime(5886): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
01-17 19:44:27.568: E/AndroidRuntime(5886): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-17 19:44:27.568: E/AndroidRuntime(5886): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
01-17 19:44:27.568: E/AndroidRuntime(5886): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-17 19:44:27.568: E/AndroidRuntime(5886): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-17 19:44:27.568: E/AndroidRuntime(5886): at java.lang.Thread.run(Thread.java:856)
01-17 19:44:27.568: E/AndroidRuntime(5886): Caused by: java.lang.NullPointerException
01-17 19:44:27.568: E/AndroidRuntime(5886): at Extra.EventDrawableImage.resizeCurrentLocImage(EventDrawableImage.java:37)
01-17 19:44:27.568: E/AndroidRuntime(5886): at Controller.EventController.getDirection(EventController.java:308)
01-17 19:44:27.568: E/AndroidRuntime(5886): at AsyncTask.GetEventDirectionAsyncTask.doInBackground(GetEventDirectionAsyncTask.java:36)
01-17 19:44:27.568: E/AndroidRuntime(5886): at AsyncTask.GetEventDirectionAsyncTask.doInBackground(GetEventDirectionAsyncTask.java:1)
01-17 19:44:27.568: E/AndroidRuntime(5886): at android.os.AsyncTask$2.call(AsyncTask.java:264)
01-17 19:44:27.568: E/AndroidRuntime(5886): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
01-17 19:44:27.568: E/AndroidRuntime
Любые идеи, потому что он работал для других функций, но не это? Заранее спасибо.
- это контекст null? – Blackbelt
Какая строка EventDrawableImage.java:37 – laune
Эта строка является int imageResource этой строкой. Нет, контекст не является нулевым, потому что он работал для другой функции также – hyperfkcb