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カードで)
誰でもこれで私を助けることができます..あなたの返事を待っています&前もって感謝します....