jpg ファイルをダウンロードしようとすると、nullPointerException が発生します。これは AsyncTask メソッドで行われますが、おそらく非同期であるため、デバッガーでプログラム フローをトレースできません。私のトレースは、停止する前に 2 つのレコードが読み取られたことを示しています。ポート 8000 をローカル サーバーとして使用しており、停止する URL は次のとおりです。
http://10.0.2.2:8000/my_album/5_irises.jpg".
jpeg ファイルと png ファイルのダウンロードに何か特別な点がありますか、それとも URL が正しくコーディングされていませんか? アンダースコアは URL の問題ですか? また、ダウンロードするたびに接続を閉じる必要がありますか?
begin of loop {
........
new AccessImages().execute(urlstring);
} ......end of loop
private class AccessImages extends AsyncTask<String, Void, Bitmap> {
protected Bitmap doInBackground(String... urladds){
return downloadImage(urladds[0]);
}
protected void onPostExecute(Bitmap bm) {
bitmap_photo[itemcount] = bm;
itemcount++;
}
}
private Bitmap downloadImage(String url) {
Log.d("downloadImage", url);
Bitmap bmap = null;
InputStream inStream = null;
// Drawable drawable = null;
try {
inStream = openHttpConnection(url);
Log.d("inStream", String.valueOf(inStream));
// drawable = Drawable.createFromStream(inStream, "src");
Log.d("before bmap", url);
bmap = BitmapFactory.decodeStream(inStream);
Log.d("after bmap", url);
inStream.close();
}
catch (IOException el) {
el.printStackTrace();
}
return bmap;
}
private InputStream openHttpConnection(String urlString) throws IOException {
InputStream inStream = null;
int checkConn = -1;
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
try {
Log.d("try openhttpconnection", urlString);
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
checkConn = httpConn.getResponseCode();
if (checkConn == HttpURLConnection.HTTP_OK) {
inStream = httpConn.getInputStream();
Log.d("instream", urlString);
}
}
catch (Exception ex) {
throw new IOException("Error connecting");
}
return inStream;
}
NullPointerException がこの命令にあることがわかりました。
inStream.close();
何が原因でしょうか?
Ok。inStream が null ではないことを修正しましたが、次の命令から NullPointerException を取得しています: bitmap_photo[itemcount] = bm;
if(bm != null)
{
bitmap_photo[itemcount] = bm;
itemcount++;
}
ビットマップの null 値をチェックできませんか、それとも配列に問題がありますか? 次のように bitmap_photo 配列を作成したことを付け加えておきます。これは問題ですか?
Bitmap [] bitmap_photo;