- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Mono for Android(本文发布时的最新版本)和 Visual Studio 插件来构建 Android 应用程序。它以 API 级别 8、Android 2.2 框架为目标。
该应用程序在运行 Android 版本 2.2.2 的摩托罗拉 Droid 上运行良好它在运行 Android 2.3.3 的摩托罗拉 Droid X2 上崩溃,调试器几乎没有输出
唯一的输出是:“Mono”程序已退出,代码为 255 (0xff)。
崩溃发生在以 using (Bitmap...
public static Drawable GetDrawable(string url) {
try {
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Bitmap bitmap = Android.Graphics.BitmapFactory.DecodeStream(response.GetResponseStream())) {
Drawable image = (Drawable)(new BitmapDrawable(bitmap));
return image;
}
}
catch {
return null;
}
}
如果我在该行设置断点,它会正确中断,但我找不到任何错误。如果我在该行之后设置断点,调试器将简单地分离并且应用程序强制退出。
我有一个类似的方法,它从 JSON 返回一个对象,并且工作正常。所以,我相当确定它与动态位图创建有关,但此时我已经尝试了所有我能想到的方法。
我刚刚在一个独立的小型项目中重现了这个问题:DrawableTest.zip
完整代码如下:
using System;
using System.Net;
using System.Threading;
using Android.App;
using Android.Widget;
using Android.OS;
using Android.Graphics;
using Android.Graphics.Drawables;
namespace DrawableTest {
[Activity(Label = "DrawableTest", MainLauncher = true, Icon = "@drawable/icon")]
public class Activity1 : Activity {
ImageView mImage;
Button mButton;
public const string mImageUrl = "http://i.stpost.com/erez4/erez?src=ProductImages/3576U_02.tif&tmp=MediumLargeG4&redirect=0&headers=proxy";
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
mImage = FindViewById<ImageView>(Resource.Id.MyImage);
mButton = FindViewById<Button>(Resource.Id.MyButton);
mButton.Click += new EventHandler(mButton_Click);
}
void mButton_Click(object sender, EventArgs e) {
ThreadPool.QueueUserWorkItem(o => AsyncImageLoad());
}
private Drawable GetDrawable(string url) {
try {
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Bitmap bitmap = Android.Graphics.BitmapFactory.DecodeStream(response.GetResponseStream())) {
Drawable image = new BitmapDrawable(bitmap);
return image;
}
}
catch (Exception e) {
return null;
}
}
private void AsyncImageLoad() {
Drawable image = GetDrawable(mImageUrl);
RunOnUiThread(() => {
mImage.SetImageDrawable(image);
});
}
}
}
最佳答案
这可能是我们流映射代码中的一个错误,类似于:http://bugzilla.xamarin.com/show_bug.cgi?id=1054
这应该会在下一个版本(1.9.x,可能)中修复。
作为解决方法,尝试复制 response.GetResponseStream()
进入 System.IO.MemoryStream,然后将 MemoryStream 传递给 BitmapFactory.DecodeStream()
.
我的想法是正确的,但方法是错误的。而不是使用 BitmapFactory.DecodeStream()
, 使用 BitmapFactory.DecodeByteArray()
.以下代码适用于您的 DrawableTest.zip
应用:
private Drawable GetDrawable(string url)
{
try {
HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(url);
using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
using (Stream responseStream = response.GetResponseStream()) {
MemoryStream workaround = new MemoryStream();
responseStream.CopyTo(workaround);
Bitmap bitmap = Android.Graphics.BitmapFactory.DecodeByteArray (
workaround.GetBuffer (), 0, (int) workaround.Length);
Drawable image = new BitmapDrawable(bitmap);
return image;
}
}
catch (Exception e) {
Log.Error("DrawableTest", "Exception: " + e.Message);
return null;
}
}
注意 using
block 以确保资源得到处理。
关于c# - BitmapFactory.DecodeStream 上的 Android 单声道退出代码 255,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7535503/
这是我的代码...我在 imageBitmap = BitmapFactory.decodeStream(is2,null, options); 处收到异常 NULL; 第一次可以解码,但为什么现在,
我应该从互联网获取图像并将其显示在我的 Activity 中。为此,我使用 asynctask 类。我忘记在我的 list 文件中提及互联网权限,并且应用程序成功运行,没有给出任何异常,并且能够获取模
我在这里从 Cursor 获取值: if (mProfileCursor.moveToFirst()) { byte[] blob = mProfileCursor.getBl
我在尝试解码大小为 2448x2448 像素的照片时遇到了一个奇怪的行为。在代码中,我正在计算应该应用 6 的 inSampleSize(基于生成的位图所需的大小),并且当我使用这些选项调用 Bitm
假设我们有一个工作线程,它使用一些连接流调用 BitmapFactory.decodeStream,如下所示: Bitmap bitmap = BitmapFactory.decodeStream(n
我正在尝试将输入流解码为位图,代码非常简单: Bitmap myBitmap = BitmapFactory.decodeStream(myStream); 但输出位图的质量太低(有时,有时质量很好)
我正在尝试领养 bitmap resizing教程 - 唯一的区别是我使用 decodeStream 而不是 decodeResource。这很奇怪,但是没有任何操作的 decodeStream 给了
我知道这个问题出现了很多次,但我找不到任何对我有帮助的解决方案。我正在从网页下载头像并将其保存在内部存储中。 在我的 Activity 中: // check if user
我们需要对从 InputStream 接收到的图像进行下采样。它是从某个 URL 接收到的图像,它可以非常小或非常大。为了将此图像放入内存,我们必须对其进行下采样。首先,我们借助 inJustDeco
我正在尝试从内部存储中保存和检索位图,但每次我尝试加载位图时,BitMapFactory 都会抛出异常: BitmapFactory: Unable to decode stream: java.io
我正在尝试用下一个代码获取一张刚刚用相机拍摄的照片,但我总是遇到同样的错误: skia(446): --- SkImageDecoder::Factory returned null (它不会抛出异
我们使用下面的函数从 URL 下载图像。有时,BitmapFactory.decodeStream 我们会得到 null。由于这个问题,收到的通知没有图像。任何人都可以帮助我们解决该问题.. 这是我的
我在我的应用程序中使用我自己的 Android ViewFlow 示例实现。我正在从网络服务下载加密图像,而不是将它们保存在 SD 卡上。我正在使用 viewflow 即时解密图像并显示它们。但问题是
显然这是一项昂贵/耗时的操作。有什么办法可以改善这个? Bitmap bm = BitmapFactory.decodeStream((InputStream) new URL(
我试图从图像的路径中获取位图图像。但是 BitmapFactory.decodeStream 返回 null 值。 代码: URL url = new URL(path); HttpURLConnec
我看了很多关于解码位图的内存分配问题的相关帖子,但使用官网提供的代码仍然无法找到以下问题的解决方案。 这是我的代码: public static Bitmap decodeSampledBitmapF
在从 BitmapFactory.decodeStream(imagestream) 返回之前,我需要调整/缩小我从图库中选择的图像。当我选择大图像时,它会抛出 OutOfMemory Excepti
我在 AsyncTask 中使用 BitmapFactory.decodeStream() 从 Internet 下载位图。在我的应用程序中,我有一个图像 ListView ,我只想下载用户可以看到的
我有以下异步任务,它应该只从给定的 URL 加载图像。图片确实存在,我可以访问它们 private class FetchVehicleImage extends AsyncTask {
我的代码旨在在按下 UI 按钮时使用来自服务器的图像更新 ImageView。 下面显示的客户端代码是一个 Runnable,在按下按钮时运行。服务器是一个桌面 Java 应用程序,在后台运行 ffm
我是一名优秀的程序员,十分优秀!