2

我正在使用 HTTPConnections & Filesystems 下载图像并将该图像保存在黑莓模拟器 SDCard 中。当我执行代码时,它在 BB 9800 模拟器(操作系统版本 6.0)和 BB 9550 模拟器(操作系统版本 5.0)中运行良好。但是当我在 BB 9900 Simulator(操作系统版本 7.1)中执行相同的代码时,没有得到输出(我的意思是不将图像保存在 SDCard 中)。以下是我正在使用的以下代码..

代码:

MyApp.java

   public class MyApp extends UiApplication
 {
/**
 * Entry point for application
 * @param args Command line arguments (not used)
 */ 
   public static void main(String[] args)
  {
    // Create a new instance of the application and make the currently
    // running thread the application's event dispatch thread.
    MyApp theApp = new MyApp();       
    theApp.enterEventDispatcher();
  }
/**
 * Creates a new MyApp object
 */
   public MyApp()
  {        
    // Push a screen onto the UI stack for rendering.
    pushScreen(new MyScreen());
 }    
}

MyScreen.java

  public final class MyScreen extends MainScreen
 {
/**
 * Creates a new MyScreen object
 */
  public MyScreen()
  {        
    // Set the displayed title of the screen       
    setTitle("MyTitle");        
    LabelField title = new LabelField("hiiiiiiiiiiii", LabelField.ELLIPSIS);
    add(title);
    DownloadHelper downloader = new DownloadHelper("http://www.google.co.in/images/srpr/logo3w.png");
    System.out.println("this is downloader");
    Thread worker = new Thread(downloader);
    worker.start();     
   }
  }

下载Helper.java

  public class DownloadHelper implements Runnable{

private String _url;

   public DownloadHelper(String url) {
      _url = url;
   }
public void run() {
    // TODO Auto-generated method stub

    System.out.println("---------------download helper page");
    HttpConnection connection = null;
      OutputStream output = null;
      InputStream input = null;
      try {
         // Open a HTTP connection to the webserver
         connection = (HttpConnection) Connector.open(_url);
         // Getting the response code will open the connection, send the request,
         // and read the HTTP response headers. The headers are stored until requested.
         if (connection.getResponseCode() == HttpConnection.HTTP_OK) {
             System.out.println("----------------http connection response");
            input = new DataInputStream(connection.openInputStream());
            int len = (int) connection.getLength();   // Get the content length
            if (len > 0) {
                System.out.println("--------------entered into condition");
               // Save the download as a local file, named the same as in the URL
               String filename = _url.substring(_url.lastIndexOf('/') + 1);
               FileConnection outputFile = (FileConnection) Connector.open("file:///SDCard/BlackBerry/pictures/" + filename, 
                     Connector.READ_WRITE);
               if (!outputFile.exists()) {
                  outputFile.create();
               }
               // This is probably not a robust check ...
               if (len <= outputFile.availableSize()) {
                  output = outputFile.openDataOutputStream();
                  // We'll read and write this many bytes at a time until complete
                  int maxRead = 1024;  
                  byte[] buffer = new byte[maxRead];
                  int bytesRead;

                  for (;;) {
                     bytesRead = input.read(buffer);
                     if (bytesRead <= 0) {
                        break;
                     }
                     output.write(buffer, 0, bytesRead);
                  }
                  output.close();
               }
            }
         }
      } catch (java.io.IOException ioe) {
         ioe.printStackTrace();
      } finally {
         try {
            if (output != null) {
               output.close();
            }
            if (connection != null) {
               connection.close();
            }
            if (input != null) {
               input.close();
            }
         } catch (IOException e) {
            // do nothing
         }
      }
      System.out.println("download completed.......");
}
}

以下是我用来下载图像并将其保存在 BB SDCard 中的代码。

在黑莓模拟器中:

BB 9550 (5.0 OS) ---- 工作(在 SDCard 中保存图像)
BB 9800 (6.0 OS) ---- 工作(在 SDCard 中保存图像)
BB 9900 (7.1 OS) ---- 不工作(不保存图像在 SD 卡中)

任何人都可以帮我解决这个问题.. 等待您的回复并提前感谢....

4

2 回答 2

1

我刚刚在我的 9900 OS 7.1 模拟器上运行了代码,它对我有用。这并不意味着代码是完美的,并且在异常情况下不会失败。但是,这是我的猜测:

每个模拟器都有单独的设置。您还记得为您的 9900 模拟器设置 SDCard 吗?在模拟器菜单上,转到Simulate -> Change SD Card ...并确保 SDCard 已设置。例如,我通常只在我的计算机上使用一个 SDCard 目录,C:\temp\SDCard以便我可以运行不同的模拟器,并拥有相同的 /SDCard/BlackBerry/pictures/ 目录。

在此处输入图像描述

正如我在发布的答案中提到的那样DownloadHelper,代码假定文件夹 /SDCard/BlackBerry/pictures 存在。如果该文件夹不存在,您可能希望使用代码创建该文件夹mkdirs(),或者至少检查您的模拟器正在使用的 SDCard 文件夹,并确保那里已经有一个BlackBerry/pictures文件夹。

否则,只需使用调试器,并尝试确定哪一行DownloadHelper.run()失败。

于 2012-06-22T06:50:46.877 回答
0

我有同样的问题,但我通过以下方式解决了它。

Step1:设置java主路径:

set JAVA_HOME=C:\Program Files\Java\jre6

Step2:选择项目->点击运行配置->选择模拟器选项卡->勾选启动MDS与模拟器的连接服务

Step3 : 双击rub.bat文件,位于 中MDS,该文件位于我系统中安装 Eclipse 的位置,该文​​件夹位于

F:\eclipse\eclipse\plugins\net.rim.ejde.componentpack7.1.0_7.1.0.10\components\MDS

Step4:双击run.bat文件。cmd.exe 将执行并启动服务器。

Step5:现在运行模拟器

我希望这将有所帮助。

于 2013-08-07T07:00:53.870 回答