如何在android的列表中设置imageview中的默认图片?
我想在结果为空时显示默认图片,下面是我的尝试:如何在android的列表中设置imageview中的默认图片?,android,listview,bitmap,imageview,drawable,Android,Listview,Bitmap,Imageview,Drawable,我想在结果为空时显示默认图片,下面是我的尝试: public static Bitmap getBitmapFromURL(String src) { try { URL url = new URL(src); HttpURLConnection connection = (HttpURLConnection) url.openConnection();
public static Bitmap getBitmapFromURL(String src) {
try {
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
connection.disconnect();
return myBitmap;
} catch (IOException e) {
// tasvirdimg.setImageResource(R.drawable.p3_books);
e.printStackTrace();
return null;
}
}
}
要使用的类getBitmapFromURL
:
class RetrievePic extends AsyncTask<String, String, Bitmap>{
@Override
protected Bitmap doInBackground(String... urls) {
String url = urls[0];
return JSONCommands.getBitmapFromURL(url);
}
}
当图片为空时,它不显示任何内容,但应该显示默认图片,即R.drawable.p3\u books
。感谢您的帮助。您可以尝试以下方法:
if(img == null)
{
tasvirlimg.setImageDrawable(R.drawable.p3_books);
}
else
{
tasvirlimg.setImageBitmap(img);
}
为什么不在xml中设置项目的默认pic,然后在结果不为空时替换默认pic
<ImageView
...
android:src="@drawable/p3_books"
/>
编辑:
class RetrievePic扩展了异步任务{
最终图像=(ImageView)findViewById(R.id.limg_tasvir);
@凌驾
受保护位图doInBackground(字符串…URL){
字符串url=url[0];
返回jsonCommand.getBitmapFromURL(url);
}
@凌驾
受保护的void onPreExecute(){
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
图片.挫折资源(R.drawable.p3_图书);
}
});
}
}
您要做的是实现适配器的getView()
方法,类似这样
...
final imageView = ...;
imageView.setImageBitmap(defaultBitmap);
new AsyncTask<Void,Void,Bitmap>() {
public Bitmap doInBackground(Void... params) {
// get bitmap from `net, or return null if failure
}
public void onPostExecute(Bitmap result) {
if (result != null) {
imageView.setBitmap(result);
}
}
}.execute();
。。。
最终图像视图=。。。;
setImageBitmap(默认位图);
新建异步任务(){
公共位图doInBackground(无效…参数){
//从`net获取位图,如果失败,则返回null
}
public void onPostExecute(位图结果){
如果(结果!=null){
imageView.setBitmap(结果);
}
}
}.execute();
这样,将设置默认值。如果您碰巧获得网络结果,请更改默认值。您可以使用或下载您的图像,还可以为您的占位符设置默认图像。我想知道是否有人来这里编辑问题等以获得星星!!!!请帮我解决问题@Mohammaddahchamani坦克你,但你能帮我用我自己的代码吗?!!我认为您应该在if/else语句中设置默认图片,而不是catch块。@MohammadRahchamani是的。我这么做了,但没用,有错误,亲爱的!tasvirlimg是ImageView,没有setImageBitmap类。请尝试tasvirling.setImageDrawable(R.drawable.p3_);而不是setImageBitmap(..)。如果这不适合你。您可以尝试Jeffrey Blattman发布的示例,这也应该有效。亲爱的,您看到我的代码了吗?因为R.drawable.p3_books是一个资源,我已经尝试过tasvirdimg.setImageResource(R.drawable.p3_books);谢谢这是我的ImageView:正如你所看到的,我设置了这个选项,但它不起作用!runOnUiThread和tasvirdimg是2个错误。我在另一个类中有tasvirdimg,我不知道runOnUiThread。@NiloofarHakkaki-我刚刚注意到并将其更改为tasvirlimg-如果runOnUiThread出现错误,请将其取出-受保护的void onPreExecute(){tasvirlimg.setBackgroundResource(R.drawable.p3_books);}tasvirlimg和tasvirdimg都在其他类中:)位图的类是独占的。@NiloofarHakkaki-您是否尝试将它们设置为静态以便能够访问它们-我需要查看更多代码或错误日志-您应该将默认pic设置为您发现的任何一个VIEWBYID limg_tasvirI无法理解的类型:))请解释一下一个15个例子的声誉去理解!!!非常感谢。
class RetrievePic extends AsyncTask<String, String, Bitmap>{
final image = (ImageView) findViewById(R.id.limg_tasvir);
@Override
protected Bitmap doInBackground(String... urls) {
String url = urls[0];
return JSONCommands.getBitmapFromURL(url);
}
@Override
protected void onPreExecute() {
runOnUiThread(new Runnable() {
@Override
public void run() {
image.setBackgroundResource(R.drawable.p3_books);
}
});
}
}
...
final imageView = ...;
imageView.setImageBitmap(defaultBitmap);
new AsyncTask<Void,Void,Bitmap>() {
public Bitmap doInBackground(Void... params) {
// get bitmap from `net, or return null if failure
}
public void onPostExecute(Bitmap result) {
if (result != null) {
imageView.setBitmap(result);
}
}
}.execute();