2011-04-01 47 views
0

我想在我的黑莓應用程序中添加一個地圖字段,但導航到該屏幕時出現異常,說IllegalArgumentException(位圖太大)。任何想法?在應用程序中顯示MapField會拋出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

更新之間:

我試着按你的建議,但仍然是拋出同樣的錯誤。我注意到一件奇怪的事情。更新代碼如下:

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用法的東西就足夠了。當你顯示/繪製/繪製水平時,即使你沒有明確地創建它,也會使用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

我試着按你的建議,但仍然拋出興田同樣的錯誤 – 2011-04-02 11:27:55

+0

然後根據你貼我不知道什麼建議的代碼。順便說一句,因爲你在屏幕的構造函數中,所以在這個時候調用Field.getHeight(),Field.getWidth()都是沒有意義的。看到我的另一篇文章 - http://stackoverflow.com/questions/5368139/how-get-height-of-title-screen-on-blackberry-screen/5368626#5368626 – 2011-04-02 15:21:04

相關問題