私のポストクラスでは、saveBitmapメソッド内で、私のインターフェイスのメソッドを使用してURLに行き、イメージをビットマップに取得して返します。それはうまく動作し、ビットマップを取得しますが、インターフェイスメソッド(図1)の外でビットマップ[0]を使用しようとすると、nullと表示されます。オーバーライドされたメソッド以外の値を使用するとnullになる
したがって、取得した値を処理する必要があるときは、メソッド内にある必要があり、何らかの理由でそれを取り出せません。これに続く他の問題(結びつく可能性がある)は、onDownloadCompleteメソッドを2回オーバーライドする必要があるということです。私のポストクラスの一番下に、空のボディで再びオーバーライドされていることがわかります。私はonDownloadImageListenerを実装している私のPostクラスの一番上の行が赤線にならないようにしています。
これを修正する方法がわかりません。リスナーメソッド以外の値を取得できるようにしたいと考えています。
Postクラス:
public class Post extends Fragment implements OnDownloadImageListener {
...
private void saveBitmap(String userName, String key){
DownloadImage downloadImage = new DownloadImage();
final Bitmap[] bitmap = new Bitmap[1];
final String url = "https://graph.facebook.com/" + key + "/picture?type=large";
downloadImage.execute(url);
downloadImage.setOnDownloadImageListener(new OnDownloadImageListener() {
@Override
public void onDownloadComplete(Bitmap bmap) {
bitmap[0] = bmap;
}
});
//**FIGURE 1**
}
@Override
public void onDownloadComplete(Bitmap bmap) { //I need this otherwise it gives me an error on the top line where I have "implements OnDownloadImageListener"
DownloadImageクラス:
public class DownloadImage extends AsyncTask<String, Void, Bitmap> {
private OnDownloadImageListener listener;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Bitmap doInBackground(String... URL) {
String imageURL = URL[0];
Bitmap bitmap = null;
try {
// Download Image from URL
InputStream input = new java.net.URL(imageURL).openStream();
// Decode Bitmap
bitmap = BitmapFactory.decodeStream(input);
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
if(listener!=null){
listener.onDownloadComplete(result);
}
}
public void setOnDownloadImageListener(OnDownloadImageListener listener){
this.listener=listener;
}
}
、最終的には、マイインタフェース/リスナー:
public interface OnDownloadImageListener {
void onDownloadComplete(Bitmap bmap);
}
使用 'downloadImage.setOnDownloadImageListener(本)'と 'Bitmap'は_ "私Postクラスの一番下に"' onDownloadComplete(ビットマップBMAP) 'メソッド_に渡さ処理します。 – Onik
@Onikありがとう、それは同じ方法の2つを使うという私の問題の一部を解決しました。しかし、グローバル変数を使用してonDownloadCompleteから取得する値として設定すると、onDownloadCompleteの内部で使用されていない限り何らかの理由でnullが返されます。このための特定のソリューションですか? – SaltySea
_ "これは、onDownloadCompleteの内部で使用されていない限り何らかの理由でnullを返します。これに対する特定の解決策はありますか?"あなたのケースでネットワーク応答を取得することは、非同期操作です。 'Bitmap'の値は操作が完了するまで変更されません。これまでの 'Bitmap'は初期値と等しくなります(' null'ならば 'null'です)。だから、あなたは 'Post'クラスに' Bitmap'の値が変更されたことを知らせるためにインターフェースを使用します。 – Onik