我正在尝试从 Firebase 检索照片网址并将其转换为位图。上传到 Firebase 并从 Firebase 存储中检索图像以显示在列表视图中没有问题,因为 Glide 库正在转换 url 并将图像放入 ImageView。但是,对于 OpenGL 中的位图纹理,Glide 是不合适的。照片 url 是这样出来的(关键信息已被更改以保护安全,但格式相同):
在 logcat 中,它显示检索到的 url。虽然是那种格式。我使用 SharedPreferences 保存 url。我正在使用 Rajawali OpenGL 框架来展示一个 3d 模型,该模型从保存到 SharedPreferences 的图像 url 中获取它的位图。我使用这个异步类将 url 转换为位图并将其应用于 3d 模型纹理。
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import org.rajawali3d.materials.textures.Texture;
import org.rajawali3d.materials.textures.TextureManager;
public class AsyncLoadImageTask extends AsyncTask<String, String, Bitmap> {
private final static String TAG = "AsyncTaskLoadImage";
private Texture texture;
public AsyncLoadImageTask(Texture texture) {
this.texture = texture;
}
@Override
protected Bitmap doInBackground(String... params) {
Bitmap bitmap = null;
try {
URL url = new URL(params[0]);
bitmap = BitmapFactory.decodeStream((InputStream)url.getContent());
} catch (IOException e) {
Log.e(TAG, e.getMessage());
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
texture.setBitmap(bitmap);
TextureManager.getInstance().replaceTexture(texture);
}
}
然后我在我的渲染器 onRender() 方法中调用它:
try {
//This is reference to the String containing the url
String url = UserPrefs.getCustomLabel(mContext);
new AsyncLoadImageTask(labelTex).execute(url);
} catch (Exception e) {
e.printStackTrace();
}
}
当 Rajawali 框架尝试应用转换后的位图时,它说 url 字符串为空/空。
这是来自 UserPrefs.getCustomLabel() 的引用方法:
public static String getCustomLabel(Context context){
SharedPreferences settings;
String text;
settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); //1
text = settings.getString(LABEL_KEY, null); //2
Log.d(UP_TAG, "Retrieved Url: " + text);
return text;
}