This example code use Html.ImageGetter load image from internet, in AsyncTask, to solve error of android.os.NetworkOnMainThreadException in the old example Html.ImageGetter load image from internet.
In order to load image from internet, permission of "android.permission.INTERNET" have to be added in AndroidManifest.xml.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
| package com.example.androidhtmltextview; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import android.support.v7.app.ActionBarActivity; import android.text.Html; import android.text.method.LinkMovementMethod; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { public class HttpGetDrawableTask extends AsyncTask<String, Void, Drawable> { TextView taskTextView; String taskHtmlString; HttpGetDrawableTask(TextView v, String s) { taskTextView = v; taskHtmlString = s; } @Override protected Drawable doInBackground(String... params) { Drawable drawable = null ; URL sourceURL; try { sourceURL = new URL(params[ 0 ]); URLConnection urlConnection = sourceURL.openConnection(); urlConnection.connect(); InputStream inputStream = urlConnection.getInputStream(); BufferedInputStream bufferedInputStream = new BufferedInputStream( inputStream); Bitmap bm = BitmapFactory.decodeStream(bufferedInputStream); // convert Bitmap to Drawable drawable = new BitmapDrawable(getResources(), bm); drawable.setBounds( 0 , 0 , bm.getWidth(), bm.getHeight()); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return drawable; } @Override protected void onPostExecute(Drawable result) { final Drawable taskDrawable = result; if (taskDrawable != null ) { taskTextView.setText(Html.fromHtml(taskHtmlString, new Html.ImageGetter() { @Override public Drawable getDrawable(String source) { return taskDrawable; } }, null )); } } } TextView htmlTextViewRemote; String htmlStringRemote = "Image load from internet" @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); htmlTextViewRemote = new TextView( this ); setContentView(htmlTextViewRemote); htmlTextViewRemote.setText(Html.fromHtml(htmlStringRemote, new Html.ImageGetter() { @Override public Drawable getDrawable(String source) { Toast.makeText(getApplicationContext(), source, Toast.LENGTH_LONG).show(); HttpGetDrawableTask httpGetDrawableTask = new HttpGetDrawableTask( htmlTextViewRemote, htmlStringRemote); httpGetDrawableTask.execute(source); return null ; } }, null )); htmlTextViewRemote.setMovementMethod(LinkMovementMethod.getInstance()); } } |
In order to load image from internet, permission of "android.permission.INTERNET" have to be added in AndroidManifest.xml.
No comments:
Post a Comment