Issue
I am succesfully parsed xml and got text and url from tags and attributes. Text I was succesfully set into my ListView, but I cannot load my bitmap Into ImageView. I think I am forgetting something small, like some conversion somewhere or I have wrote wrong AsyncTask.
Here Is my parsing and AsyncTask call:
private List<SomeItem> items = new ArrayList();
listView = findViewById(R.id.listView);
IV = findViewById(R.id.iconsrc);
ArrayList<String> list = new ArrayList<>();
try {
XmlPullParser parser = getResources().getXml(R.xml.myxml);
while (parser.next() != XmlPullParser.END_DOCUMENT) {
tagname = parser.getName();
switch (parser.getEventType()){
case XmlPullParser.START_TAG:
if (tagname != null && tagname.equals(iconsrc)){
iconsrcVALUE = parser.getAttributeValue(0);
myBitmap = new AsyncForBitmap().execute(iconsrcVALUE).get();
IV.setImageBitmap(myBitmap);
}
break;
case XmlPullParser.TEXT :
tagtext = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname != null && tagname.equals(displayname)) {
programmes.add(new SomeItem(tagtext, myBitmap));
}
break;
}
}
} catch (Throwable t) {
Toast.makeText(this,
"Error while loading xml document: " + t.toString(), Toast.LENGTH_LONG)
.show();
}
SomeAdapter adapter = new SomeAdapter(this, R.layout.list_item, items);
listView.setAdapter(adapter);
My AsyncTask:
class AsyncForBitmap extends AsyncTask<String, Void, Bitmap> {
private Exception exception;
protected Bitmap doInBackground(String... urls) {
try {
URL url=new URL(urls[0]);
Bitmap bitmap = BitmapFactory.decodeStream((InputStream)url.getContent());
return bitmap;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
Maybe I must add(overwrite) onPostExecute() method? But what I need to do there?
I tried smth like:
protected void onPostExecute(Bitmap bitmap) {
IV.setImageBitmap(bitmap);
}
But It Is wrong.
Solution
You can do something like passing of ImageView into AsyncTask in constructor. For this first modify your AsyncTask as below:
class AsyncForBitmap extends AsyncTask<String, Void, Bitmap> {
private final ImageView mImageView;
public AsyncForBitmap(ImageView imageView){
mImageView = imageView;
}
private Exception exception;
protected Bitmap doInBackground(String... urls) {
try {
URL url=new URL(urls[0]);
Bitmap bitmap = BitmapFactory.decodeStream((InputStream)url.getContent());
return bitmap;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Bitmap bitmap){
mImageView.setImageBitmap(bitmap);
}
}
And then, simply do as:
...
case XmlPullParser.START_TAG:
if (tagname != null && tagname.equals(iconsrc)){
iconsrcVALUE = parser.getAttributeValue(0);
new AsyncForBitmap(IV).execute(iconsrcVALUE);
}
break;
Answered By - Chintan Soni
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.