2015-01-17 3 views
1

У меня была проблема при попытке получить изображение из файла с возможностью рисования и изменить его размер и нанести на карту. Вот код: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 

Любые идеи, потому что он работал для других функций, но не это? Заранее спасибо.

+1

- это контекст null? – Blackbelt

+0

Какая строка EventDrawableImage.java:37 – laune

+0

Эта строка является int imageResource этой строкой. Нет, контекст не является нулевым, потому что он работал для другой функции также – hyperfkcb

ответ

1

Здесь:

int imageResource = context.getResources().getIdentifier(uri, null, 
      context.getPackageName()); 

getIdentifier метод принимает:

. Наименование ресурса в качестве первого параметра

. Название ресурсного каталога, такого как raw, drawable, .. как второй параметр

. Применение имя пакета в качестве третьего параметра

Таким образом, получить идентификатор ресурса, используя имя как:

int imageResource = context.getResources().getIdentifier(locPic, "drawable", 
      context.getPackageName()); 

, а также убедитесь, что context не null.

+0

, он не объясняет NPE, хотя – Blackbelt

1

Там хороший шанс, что

context.getResources().getIdentifier(uri, null, 
     context.getPackageName()); 

возвращает нуль, которые не могут быть сохранены в междунар (это может быть в Integer) и, следовательно, вызывает NPE.

Но возвращаемое значение null, вероятно, является признаком того, что что-то не так - см. Другой ответ.

Смежные вопросы