2011-04-01 3 views
0

Я пытаюсь добавить поле карты в своем приложении Blackberry, но получаю исключение при навигации по этому экрану, говоря, что IllegalArgumentException (битмап слишком велик). Есть идеи?Отображение MapField внутри приложения throws IllegalArgumentException Растровое изображение слишком большое исключение

Код:

package com.quadrazol.bb.fpg.screens.maps; 

import net.rim.device.api.lbs.maps.ui.MapField; 
import net.rim.device.api.lbs.maps.model.MapDataModel; 
import net.rim.device.api.lbs.maps.model.MapLocation; 
import net.rim.device.api.lbs.maps.model.Mappable; 
import net.rim.device.api.system.Display; 
import net.rim.device.api.ui.Color; 
import net.rim.device.api.ui.Graphics; 
import net.rim.device.api.ui.component.SeparatorField; 
import net.rim.device.api.ui.container.VerticalFieldManager; 

import com.quadrazol.bb.fpg.screens.TabScreen; 
import com.quadrazol.bb.fpg.util.DataHelper; 
import com.quadrazol.bb.fpg.util.UIHelper; 

public class FindAPlannerScreen extends TabScreen { 

    private MapField basicMapField; 

    public FindAPlannerScreen() { 
     super(); 
     VerticalFieldManager mgr = new VerticalFieldManager(
       VerticalFieldManager.USE_ALL_HEIGHT 
         | VerticalFieldManager.USE_ALL_WIDTH 
         | VerticalFieldManager.NO_VERTICAL_SCROLL) { 
      public void paint(Graphics graphics) { 
       graphics.setBackgroundColor(Color.BLACK); 
       graphics.clear(); 
       super.paint(graphics); 
      } 
     }; 
     add(mgr); 
     mgr.add(UIHelper.generateHeader()); 
     mgr.add(new SeparatorField() { 
      public void paint(Graphics graphics) { 
       graphics.setColor(Color.WHITE); 
       super.paint(graphics); 
      } 

     }); 

     VerticalFieldManager mainScrollView = UIHelper.generateMainScrollView(); 
     basicMapField = new MapField(mainScrollView.getWidth()-6,(int) (mainScrollView.getHeight()*.90)); 
     MapDataModel model = basicMapField.getModel(); 
     Mappable[] plannerDetails = DataHelper.fetchPlannerDetails(); 
     if (plannerDetails != null) { 
      model.addAll(plannerDetails); 
     } 

     mainScrollView.add(basicMapField); 
     mgr.add(mainScrollView); 

     mgr.add(UIHelper.generateTabBarForScreen(UIHelper.TAB_MAP)); 
    } 
} 

Исключение:

[0.0] ViewEngine$RenderingEngine:unknown exception occured, IllegalArgumentException(Bitmap is too large) 
[0.0] IllegalArgumentException 
[0.0] Bitmap is too large 
[0.0] net_rim_cldc-10(4C48DD41) 
[0.0] Bitmap 
[0.0] <init> 
[0.0] 0x8778 
[0.0] net_rim_cldc-10(4C48DD41) 
[0.0] Bitmap 
[0.0] <init> 
[0.0] 0x8628 
[0.0] net_rim_cldc-10(4C48DD41) 
[0.0] Bitmap 
[0.0] <init> 
[0.0] 0x8609 
[0.0] net_rim_cldc-10(4C48DD41) 
[0.0] Bitmap 
[0.0] <init> 
[0.0] 0x85ED 
[0.0] net_rim_cldc-10(4C48DD41) 
[0.0] Bitmap 
[0.0] <init> 
[0.0] 0x859E 
[0.0] net_rim_bb_maps_api-4(4C48E231) 
[0.0] ViewEngine 
[0.0] generateContext 
[0.0] 0x6457 
[0.0] net_rim_bb_maps_api-4(4C48E231) 
[0.0] ViewEngine$RenderingEngine 
[0.0] <private> 
[0.0] 0x65F2 
[0.0] net_rim_bb_maps_api-4(4C48E231) 
[0.0] ViewEngine$RenderingEngine 
[0.0] run 
[0.0] 0x6507 

PS: Я также путать между использованием net.rim.device.api.lbs.maps.ui.MapField и net.rim.device.api.lbs.MapField

Update:

Я попытался, как в вашей предложение, но все же оно бросает ту же ошибку , Я заметил одну странную вещь. Обновленный код выглядит следующим образом:

int displayWidth = Display.getWidth(); 
     int displayHeight = Display.getHeight(); 
     basicMapField = new MapField(displayWidth/2, displayHeight/2); 
     System.out.println("Display Dimen:"+displayHeight+" "+displayWidth); 
     System.out.println("Map Dimen:"+basicMapField.getHeight()+" "+basicMapField.getWidth()); 

Но в журналах я не вижу установленных параметров. Журналы показывает:

[0.0] Display Dimen:480 360 
[0.0] Map Dimen:0 0 

ответ

1

IllegalArgumentException: Bitmap is too large означает, что где-то внутри внутреннего кода RIM, была предпринята попытка создать действительно большой Bitmap экземпляр. Что «действительно большой» знает только RIM - нет четкой документации по этому несчастью.

Так что общее правило, чтобы не попасть в эту проблему, - это каким-то образом ограничить или ограничить размеры экземпляра Bitmap. Обратите внимание, что для того, чтобы попасть в проблему, вам даже не нужно явно создавать экземпляр Bitmap, так как в вашем случае этого достаточно, чтобы создать другой материал, который подразумевает использование Bitmap. Определенно, когда вы показываете/рисуете/рисуете smth, тогда используется Bitmap, даже если вы не создадите его явно.

Из кода вы публикуемую Я подозреваю, эта линия может вызвать проблемы:

basicMapField = new MapField(mainScrollView.getWidth()-6, 
         (int) (mainScrollView.getHeight()*.90)); 

Вы знаете, какие аргументы фактически передаются MapField конструктор? Чтобы проверить это предположение, вы можете попробовать это:

int displayWidth = Display.getWidth(); 
int displayHeight = Display.getHeight(); 
basicMapField = new MapField(displayWidth/2, displayHeight/2); 
+0

Я пытался в соответствии с вашим предложением, но все же бросает HTE же ошибка –

+0

Затем на основе кода, публикуемую я не знаю, что предложить. Кстати, поскольку вы находитесь в конструкторе экрана, бессмысленно называть любой из 'Field.getHeight()', 'Field.getWidth()' на этом этапе. См. Мой другой пост об этом - http://stackoverflow.com/questions/5368139/how-get-height-of-title-screen-on-blackberry-screen/5368626#5368626 –

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