2

HTTPConnections & Filesystems を使用してイメージをダウンロードし、そのイメージをブラックベリー シミュレータ SDCard に保存しています。コードを実行すると、BB 9800 シミュレーター (OS バージョン 6.0) と BB 9550 シミュレーター (OS バージョン 5.0) で正常に動作します。しかし、BB 9900 シミュレーター (OS バージョン 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に保存するために使用しているコードです。

Blackberry シミュレーターの場合:

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シミュレーター用にSDカードをセットアップしたことを覚えていますか?シミュレータメニューで、[シミュレーション] - > [ SDカードの変更... ]に移動し、SDカードが設定されていることを確認します。私は通常、コンピューターで1つのSDCardディレクトリのみを使用して、C:\temp\SDCardさまざまなシミュレーターを実行できるようにします。たとえば、同じ/ SDCard / BlackBerry /pictures/ディレクトリを使用します。

ここに画像の説明を入力してください

投稿した回答で述べたようにDownloadHelper、コードは/ SDCard / BlackBerry/picturesフォルダーが存在することを前提としています。存在しない場合は、コードでそのフォルダーを作成するか、少なくともシミュレーターが使用しているSDCardフォルダーを確認し、 mkdirs()BlackBerry/picturesフォルダーがすでに存在することを確認することをお勧めします。

それ以外の場合は、デバッガーを使用して、DownloadHelper.run()失敗している行を特定してください。

于 2012-06-22T06:50:46.877 に答える