- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将 HTML 显示到 TextView 中:
String html = "Hello " +
"<img src='http://www.gravatar.com/avatar/" +
"f9dd8b16d54f483f22c0b7a7e3d840f9?s=32&d=identicon&r=PG'/>" +
" This is a test " +
"<img src='http://www.gravatar.com/avatar/a9317e7f0a78bb10a980cadd9dd035c9?s=32&d=identicon&r=PG'/>";
Spanned htmlSpan = Html.fromHtml(html, imageParser, null);
textView.setText(htmlSpan);
下面的 ImageParser
完成了这项工作:
public class URLImageParser implements Html.ImageGetter {
Context c;
View container;
/***
* Construct the URLImageParser which will execute AsyncTask and refresh the container
* @param t
* @param c
*/
public URLImageParser(View t, Context c) {
this.c = c;
this.container = t;
}
public Drawable getDrawable(String source) {
URLDrawable urlDrawable = new URLDrawable();
// get the actual source
ImageGetterAsyncTask asyncTask =
new ImageGetterAsyncTask( urlDrawable);
asyncTask.execute(source);
// return reference to URLDrawable where I will change with actual image from
// the src tag
return urlDrawable;
}
public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> {
URLDrawable urlDrawable;
public ImageGetterAsyncTask(URLDrawable d) {
this.urlDrawable = d;
}
@Override
protected Drawable doInBackground(String... params) {
String source = params[0];
return fetchDrawable(source);
}
@Override
protected void onPostExecute(Drawable result) {
// set the correct bound according to the result from HTTP call
urlDrawable.setBounds(0, 0, 0 + result.getIntrinsicWidth(), 0
+ result.getIntrinsicHeight());
// change the reference of the current drawable to the result
// from the HTTP call
urlDrawable.drawable = result;
// redraw the image by invalidating the container
URLImageParser.this.container.invalidate();
}
/***
* Get the Drawable from URL
* @param urlString
* @return
*/
public Drawable fetchDrawable(String urlString) {
try {
InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");
drawable.setBounds(0, 0, 0 + drawable.getIntrinsicWidth(), 0
+ drawable.getIntrinsicHeight());
return drawable;
} catch (Exception e) {
return null;
}
}
private InputStream fetch(String urlString) throws MalformedURLException, IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
HttpResponse response = httpClient.execute(request);
return response.getEntity().getContent();
}
}
但它不适用于更大的图像。不起作用的String
如下:
String html = "Hello " +
"<img src='http://darwin.suav.biz/image/data/produse/Tablete/Apple/Ipad 4/hero_slide1.png" +
" This is a test " +
"<img src='http://www.gravatar.com/avatar/a9317e7f0a78bb10a980cadd9dd035c9?s=32&d=identicon&r=PG'/>";
它因以下错误而崩溃:
java.lang.NullPointerException
at md.darwin.catalog.manager.URLImageParser$ImageGetterAsyncTask$1.run(URLImageParser.java:70)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5038)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
URLImageParser.java:70
是:
urlDrawable.setBounds(0, 0, result.getIntrinsicWidth(), result.getIntrinsicHeight());
我也尝试过使用 Picasso
,方法在这里:https://github.com/aegis123/Bettyskitchen-app/blob/master/BettysKitchen-app/src/main/java/com/bettys/kitchen/recipes/app/Utils/ImageGetter.java
但我得到错误(没有崩溃):无法解码流
有谁知道更大的图像会出现什么问题?为什么在 onPostExecute
中会是 Null
?
最佳答案
您必须记录并检查 catch(Exception e)
捕获的内容。很明显那里有一个异常,fetchDrawable()
正在返回 null
。但是你没有正确地分析/检查它,没有办法知道那里出了什么问题。
Thank you. This helped. I did not even suppose my imageURL was bad. Now everything works with InputStream with bigger images.
很高兴它起作用了。如果我是你,我会应用 Picasso 而不会使用 AsyncTask。 Picasso 线程比 AsyncTask 更精细,它有 2 级(RAM n 磁盘)缓存。
关于android - 如何为大图像实现Android ImageGetter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31424672/
谁能帮我弄清楚如何使用 Html.ImageGetter 来使用 html 图像 src 标签显示图像?和例子或好的教程 最佳答案 要从应用程序资源中获取图像,首先在文本文件中插入一个 html 图像
我正在将 HTML 显示到 TextView 中: String html = "Hello " + "" + " This is a test
我正在尝试使用 将 HTML block 加载到 TextView 中,包括图像 URLImageParser p = new URLImageParser(articleBody, this); S
所以我使用 ImageGetter 来显示来自 JSON 博客文章的图像。我在日志中获得了正确的来源,但 URL 在到达 setBounds 时发生了变化。有什么想法吗? 代码: protected
我有一个加载 HTML 内容的 TextView(它也有 img 标签)。我的问题是有些图片太大,导致应用程序崩溃。有什么方法可以使所有图像的大小相同吗? 我的代码示例: St
我有一个 Html.ImageGetter 类,我将它与 Universal Image Loader 一起使用,以加载 标签中的图像,该标签包含在我在线获取的 html json 文件中。 图像加载
好的,我正在为这个而失去理智。我的程序中有一个解析 HTML 的方法。我想包含内联图像,我的印象是使用 Html.fromHtml(string, Html.ImageGetter, Html.Tag
我正在编写一个应用程序来显示来自网站的帖子,并使用 Html.fromHtml 来执行此操作。但是,如果我打开一篇文章,它会立即使用大约 25MB 的内存来加载图像。这是可以接受的,只是重新加载同一篇
我正在编写一个应用程序,它获取 HTML 页面并解析它们以显示在屏幕上。具体来说,此应用程序从留言板中提取 HTML 并列出用户发布的帖子。 问题是帖子中的很多内容都是中的图片标签,所以我需要写一个
我必须在 ListView 中显示一些带有来自 Internet 的图像的 HTML。图像在自定义 Html.ImageGetter 中处理。问题是,我需要可用的 TextView 来将图像下载到里面
我想要做的是,当按下按钮时,图像将出现在编辑文本字段中。 问题是我想多次添加图像 - 这意味着每次单击都会将图像添加到字符串中。 问题是在接下来的代码中,我只能看到最后按下的图像,而之前的图像正在变成
我正在尝试使用 Html.fromHtml 在 Base64 中显示 img 我有一个带有一张图片的 Base64 字符串的标签。 这是我的代码: public class GlossaryAdapt
感谢@Budius 所做的一切努力。 我的应用程序的大部分图像工作可以由 Picasso/Glide 处理,但是,某些图像显示在 TextView 中通过Html.fromHtml 。以及 TextV
我想用 SpannableString 设置一个 TextView,它来自下面的方法: Html.fromHtml(String source, Html.ImageGetter imageGette
我是一名优秀的程序员,十分优秀!