通过简单的适配器在imageview中显示位图图像

2023-12-09

我从网址获取图像。我在列表视图中使用图像视图。我想将位图图像列表添加到列表项的每一行中。我使用 SimpleAdapter 但图像视图显示空白。我的代码如下!

 ArrayList<HashMap<String, Bitmap>> mylist = new ArrayList<HashMap<String, Bitmap>>();

    Bundle bundle = this.getIntent().getExtras();
     get = bundle.getString("name");

     try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://www.propertyhookup.com/mobile/propertylist.php");
            nameValuePairs = new ArrayList<NameValuePair>(1);
            nameValuePairs.add(new BasicNameValuePair("zipcode", get.trim()));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

    }catch(Exception e){
            Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
    }

  //convert response to string
    try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
            }
            is.close();
            result=sb.toString();
    }catch(Exception e){
            Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
    }
    if(result.length()<= 7){
        Toast.makeText(getApplicationContext(), "No properties for this zipcode or check your zipcode ", Toast.LENGTH_LONG).show();
        //text.setText("No properties for this zipcode or check your zipcode");
    }
    else{
    try{

     jArray = new JSONObject(result);            
    }catch(JSONException e){
        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
    }

    //JSONObject json = JSONfunctions.getJSONfromURL("http://192.168.1.111/propertyhookup.com/mobile/propertylist.php");

    try{

        JSONArray  earthquakes = jArray.getJSONArray("earthquakes");

        for(int i=0;i<10;i++){                      
            map = new HashMap<String, Bitmap>();
            //HashMap<String, Drawable> map1 = new HashMap<String, Drawable>();

            JSONObject e = earthquakes.getJSONObject(i);



            if(e.getString("property_type").contains("1")) {
                proptype ="Single Family Home";
            }else if(e.getString("property_type").contains("2")) {
                proptype="Condo";
            }else if(e.getString("property_type").contains("3")) {
                proptype="Townhouse";
            }
            if(e.getString("estimated_price").contains("0")) {
                estimate = "Not Enough Market Value";
                //estimat = (TextView) findViewById(R.id.estimat);
                //estimat.setTextColor(Color.rgb(0, 0, 23));
            }else {
                estimate = "$"+e.getString("estimated_price");
            }

            photo = e.getString("photo1");

            drawable = LoadImageFromWebOperations(photo);

            //text.setImageDrawable(d);

            try
            {
                    aURL = new URL(photo);
            }
            catch (MalformedURLException e1)
            {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
            }
            URLConnection conn = null;
            try
            {
                    conn = aURL.openConnection();
            }
            catch (IOException e1)
            {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
            }
            try
            {
                    conn.connect();
            }
            catch (IOException e1)
            {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
            }
            InputStream is = null;
            try
            {
                    is = conn.getInputStream();
            }
            catch (IOException e1)
            {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
            }
            BufferedInputStream bis = new
    BufferedInputStream(is,8*1024);
            Bitmap bm = BitmapFactory.decodeStream(bis);

            map.put(photos, bm);
            mylist.add(map);


        }       
    }catch(JSONException e)        {
        Toast.makeText(getApplicationContext(),e.getMessage(), Toast.LENGTH_LONG).show();
    }



    SimpleAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main4, 
                   new String[] { "percent","propertyid",  "cityname", "statecode", "propertytype", "footage", "bathroom", "bedroom", "price", "estimated", "photos" }, 
                   new int[] { R.id.percent, R.id.property_id,  R.id.city_name, R.id.state_code, R.id.prop_type, R.id.foot, R.id.bath, R.id.bed, R.id.list, R.id.estimat, R.id.image});
    setListAdapter(adapter);

基本上,简单的适配器会自动将一些资源 ID 或 URI 绑定到行布局的图像视图。 但它不支持位图。

这是一个问题,因为每个必须管理位图的人都知道,我们经常必须减小图片的大小以防止内存不足异常。 但是,如果您想将图像添加到 listView 中,如果仅提供 URI,则无法减小图像的大小。所以这是解决方案:

我已经修改了 simpleAdapter 以能够处理位图。 将此类添加到您的项目中,并使用它代替 simpleAdapter。 然后,不要传递图像的 URI 或 ressourceId,而是传递 Bitmap !

下面是代码:

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Checkable;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.TextView;



public class ExtendedSimpleAdapter extends SimpleAdapter{
    List<? extends Map<String, ?>> map; // if fails to compile, replace with List<HashMap<String, Object>> map
    String[] from;
    int layout;
    int[] to;
    Context context;
    LayoutInflater mInflater;
    public ExtendedSimpleAdapter(Context context, List<? extends Map<String, ?>> data, // if fails to compile, do the same replacement as above on this line
            int resource, String[] from, int[] to) { 
        super(context, data, resource, from, to);
        layout = resource;
        map = data;
        this.from = from;
        this.to = to;
        this.context = context;
    }


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    return this.createViewFromResource(position, convertView, parent, layout);
}

private View createViewFromResource(int position, View convertView,
        ViewGroup parent, int resource) {
    View v;
    if (convertView == null) {
        v = mInflater.inflate(resource, parent, false);
    } else {
        v = convertView;
    }

    this.bindView(position, v);

    return v;
}


private void bindView(int position, View view) {
    final Map dataSet = map.get(position);
    if (dataSet == null) {
        return;
    }

    final ViewBinder binder = super.getViewBinder();
    final int count = to.length;

    for (int i = 0; i < count; i++) {
        final View v = view.findViewById(to[i]);
        if (v != null) {
            final Object data = dataSet.get(from[i]);
            String text = data == null ? "" : data.toString();
            if (text == null) {
                text = "";
            }

            boolean bound = false;
            if (binder != null) {
                bound = binder.setViewValue(v, data, text);
            }

            if (!bound) {
                if (v instanceof Checkable) {
                    if (data instanceof Boolean) {
                        ((Checkable) v).setChecked((Boolean) data);
                    } else if (v instanceof TextView) {
                        // Note: keep the instanceof TextView check at the bottom of these
                        // ifs since a lot of views are TextViews (e.g. CheckBoxes).
                        setViewText((TextView) v, text);
                    } else {
                        throw new IllegalStateException(v.getClass().getName() +
                                " should be bound to a Boolean, not a " +
                                (data == null ? "<unknown type>" : data.getClass()));
                    }
                } else if (v instanceof TextView) {
                    // Note: keep the instanceof TextView check at the bottom of these
                    // ifs since a lot of views are TextViews (e.g. CheckBoxes).
                    setViewText((TextView) v, text);
                } else if (v instanceof ImageView) {
                    if (data instanceof Integer) {
                        setViewImage((ImageView) v, (Integer) data);                            
                    } else if (data instanceof Bitmap){
                        setViewImage((ImageView) v, (Bitmap)data);
                    } else {
                        setViewImage((ImageView) v, text);
                    }
                } else {
                    throw new IllegalStateException(v.getClass().getName() + " is not a " +
                            " view that can be bounds by this SimpleAdapter");
                }
            }
        }
    }
}



private void setViewImage(ImageView v, Bitmap bmp){
    v.setImageBitmap(bmp);
}



}

该类的行为与原始类 (SimpleAdapter) 完全相同

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过简单的适配器在imageview中显示位图图像 的相关文章

  • 如何通过代码检测Android上的表情符号支持

    通过代码 我可以制作一个按钮 将这 3 个表情符号插入到文本中 不过 在许多手机上 当用户单击按钮时 问题是 显示为 X X X 或者更糟糕的是 它只显示三个空白空间 我想在无法正确显示表情符号的 Android 设备上禁用并隐藏我自己的内
  • Kotlin Android Firebase 数据库哈希映射转换为类

    我正在尝试从 firebase 数据库获取数据 断点显示它正在获取数据 但看起来我没有正确地将其分配给我的班级 这会导致此异常 java lang ClassCastException 无法将 java util HashMap 转换为 班
  • 将用户重定向到 iTunes 应用商店或 Google Play 商店?

    我正在寻找一种简单的解决方案来发布我的应用程序的一个链接 例如在 Facebook 上 如果用户使用移动设备访问它 它应该自动重定向到正确的应用程序商店 否则 用户应该被重定向到我的网站 iOS应用程序 http itunes apple
  • Android Widget ID 是否持久

    在从桌面删除该 Widget 实例之前 您从操作系统收到的用户桌面上特定 Widget 实例的 Widget ID 是否一致 我找不到任何明确说明这一点的文档 但我假设这是因为文档说您可以使用小部件 id 来存储任何实例配置信息 我想将一些
  • 配置项目 ':react-native-gesture-handler' 时出现问题

    大家好 我已经尝试了很长时间来解决这个问题 但不幸的是我还没有弄清楚如何解决 希望你们能帮助我 所以我有一个反应本机项目和我的朋友 以及我的一位朋友添加 React native gesture handler 包供我们使用 他对这个包没有
  • 在 Android 中使用 awt

    我有一个绘制图表的 Java Swing 应用程序 它使用 Graphics2D 调用和 awt 对象 例如 Rectangle 等 在某些时候我可能想将其移植到 Android 上 我知道我无法在 Android 上使用 Graphics
  • ndk-build error.opencv2/core/core.hpp:没有这样的文件或目录

    我在 Android 中使用 OpenCV Nonfree 模块时遇到问题 我读了这个教程https sites google com site wghsite technical notes sift surf opencv androi
  • 如何从Slog中查看日志

    如何查看 Slog API 生成的日志 是否有任何选项可以查看系统缓冲区中的日志 我的意思是查看我们使用的无线电缓冲区的日志 adb logcat b 无线电 而这个日志是由Android的Log类生成的 Slog API 的输出在哪里 怎
  • 不使用eclipse安装Android模拟器

    如何在没有eclipse的电脑上安装android模拟器 android模拟器无需安装eclipse 只需下载 android sdk 并安装即可 安装android SDK之前必须先安装JDK 完成后安装成功 您将获得两个应用程序 SDK
  • 突出显示列表视图项目

    我需要在触摸列表视图项目时突出显示它并保持突出显示状态 我尝试了我发现的一切 但没有任何效果 这是我的代码 这是列表视图
  • 使用 RoboSpice 有没有办法从异常中获取 HTTP 错误代码?

    我正在编写一个使用 RoboSpice 的应用程序 在请求侦听器 onRequestFailure SpiceException arg0 中 有没有办法确定该错误是由于发生 401 HTTP 错误而导致的 我有一个后端服务 当令牌过期时
  • Android 音乐播放器应用程序:如何为服务中运行的媒体播放器设置完整的侦听器?

    我正在编写一个音乐播放器应用程序 我在服务中有 MediaPlayer 对象 问题是 我不知道如何从服务更新用户界面 例如 我想更新当前歌曲的剩余时间 但是 因为 MediaPlayer 正在服务 我无法设置 MediaPlayer 对象的
  • Android 游戏偶尔出现延迟

    我正在用 Java 制作一个简单的 Android 游戏 我注意到每 20 40 秒就会出现一些烦人的延迟 首先 我认为它们是由垃圾收集器引起的 但当我检查 LogCat 时 我发现游戏滞后时没有垃圾收集 每当游戏开始滞后时 我都会标记日志
  • Fresco:滚动 RecyclerView 后图像消失

    我有一个 Horizo ntal RecyclerView 每个项目都有一个使用 Facebook Fresco 图像库加载到其中的图像 然而 虽然正确的图像最初是在屏幕上滚动一点时加载的 但当 RecyclerView 进一步滚动时 它就
  • 有没有办法创建 PWA(渐进式 Web 应用程序)的 Android 桌面小部件?

    我正在构建一个渐进式 Web 应用程序 有没有办法创建 Android 桌面小部件 None
  • Android 两个 Activity 之间的共享元素转换不起作用

    在我的应用程序中 我尝试使用新引入的活动之间共享的元素 如果共享元素具有固定位置 例如 android layout gravity top 但是当视图被锚定时问题就出现了 我的第一个活动如下所示
  • onStart() 到底做了什么? - 安卓[重复]

    这个问题在这里已经有答案了 一段时间以来 我一直想知道 onStart 函数在 android 生命周期中的确切作用 网上的大多数资源只是说 它在您的活动在屏幕上可见之前被调用 但到目前为止我所做的应用程序我从未使用过onStart 我在
  • 带有工具提示的搜索栏 android

    Hi All 我正在尝试使用工具提示自定义 android 搜索栏 如给定的图像 有没有办法在搜索栏中添加带有拇指的文本视图 或任何其他想法 Thanks 我们可以通过拇指的界限来做到这一点 并在seekbar的progressChange
  • 片段中的 SavedInstanceState 始终为 null

    我使用 XML 以及活动中的 setContentView 将片段附加到活动 A 有一个问题 因为我的片段中有非常动态的视图 所以当方向改变时 我必须恢复所有的观点状态 我有问题 因为我正在使用类似的东西 public void onSav
  • android.view.WindowLeaked - 使用对话框和新意图时

    我已经尝试了 stackoverflow 上提供的所有可能的解决方案 但我仍然在 logcat 中遇到此错误 活动 com xyz MainActivity 泄露了最初在此处添加的窗口 com android internal policy

随机推荐

  • 无法创建 Facebook 应用程序

    第一次尝试创建 Facebook 应用程序 浏览到https developers facebook com apps它有一个在创建链接之前注册的链接 您只需接受条款和条件即可 现在它说 创建一个应用程序来启动 但是没有按钮可以单击来创建应
  • 专门使用 Github actions 为 iOS 构建 swift 包

    我有 iOS 应用程序的 swift 包 它需要UIKit跑步 我不想使用 Github 操作构建这个包 这就是我的工作流程 name Swift on push branches main pull request branches ma
  • 如何在 MVC 3 中将 WebForms .ascx 显示为部分视图

    我正在构建一个新的 ASP NET MVC 3 应用程序 在此应用程序中 我想在我的新 MVC razor 应用程序中的覆盖层中显示旧的 WebForms 用户控件 ascx ascx cs 作为部分视图 我在网上找不到任何有关执行此操作的
  • 静态链接与动态链接

    在某些情况下 是否有任何令人信服的性能原因来选择静态链接而不是动态链接 反之亦然 我听过或读过以下内容 但我对这个主题的了解还不够 无法保证其真实性 1 静态链接和动态链接之间的运行时性能差异通常可以忽略不计 2 如果使用使用配置文件数据来
  • 为什么我的打印函数将 () 和 "" 与语句一起打印?

    这是我针对绝对初学者 Python 编程挑战的代码 food input What is your favorite entree dessert input What is your favorite dessert print nI a
  • 使用可变模板参数构建枚举

    我有一个相当简单的变体类 它支持一组预定义的类型 并提供一个枚举来指示哪些可用类型当前处于活动状态 像这样的事情 class variant enum class type integer real string etc type acti
  • Eclipse 2023-06 突然不再自动完成“sysout”

    虽然我认识到这个问题之前已经被问过 但我尝试了多个不同线程的解决方案 但到目前为止还没有解决方案 5 天前 当我使用 Eclipse 时 我没有任何问题 现在到今天我突然无法使用 ctrl space 自动完成 sysout 据我所知 Ec
  • 在 C 中将数组作为参数传递

    我 认为我 明白 如果数组是在编译时在堆栈上声明的 则只能检索数组的大小 使用 sizeof 例如 int my array 1 2 3 sizeof my array 3 一旦你开始使用指针 你就会失去这个长度信息 例如如果将 int 指
  • 如何在 Spring RestTemplate 中使用以 JSON 表示的查询参数?

    我需要使用 Spring RestTemplate 向具有表示为 JSON 的查询参数的 HTTP 端点发出请求 restTemplate getForObject apiRoot path object myObject Response
  • 当 DateTime 字段为 null 时,LINQ 中“指定的转换无效”

    我遇到问题了 我的代码使用 LINQ var resultCases from row2 in dtCases AsEnumerable where row2 Field
  • PHP 线程应该如何存储其数据?

    所以我一直在网上搜索和阅读有关 PHP pthreads3 以及它们应该如何存储数据的信息 或者更确切地说 他们不是 在我看来 线程正确存储其数据的唯一方法是创建一个新的 Threaded 对象并将其发送到线程 然后 线程可以使用此 Thr
  • UINavigationController 不弹出 UINavigationBar 项目

    我遇到一个问题 当 UINavigationController 弹出视图控制器时 我的 UINavigationBar 没有弹出它的项目 我查看了堆栈 观察到以下内容 分配的导航控制器的预期数量 在仪器中检查 堆栈上有正确数量的控制器 调
  • 如何在选中复选框的情况下克隆第一个框中的每个输入的输入?

    我想将每列的第一个输入的类型克隆 复制到同一类 id 的子框中 例如 有 5 列数据 每列都有自己的类和特定 ID 一旦我开始在每列的顶部输入上输入并选中复选框 该列的后续 子输入开始键入相同的笔划 JS var input1 docume
  • 由于twisted-iocpsupport,将 Django 应用程序部署到 Heroku 时出现问题

    我正在尝试将我制作的 Django 应用程序部署到 Heroku 上 最终弄清楚如何将其推送到 git 后 我 尝试这样做 git push heroku master 但随后它无法推送 因为它无法构建 twisted iocpsuppor
  • nginx 错误连接到 php5-fpm.sock 失败(13:权限被拒绝)

    我将 nginx 更新为1 4 7和 PHP 到5 5 12 之后我得到了502错误 在我更新之前一切正常 nginx 错误 log 2014 05 03 13 27 41 crit 4202 0 1 connect to unix var
  • Gprof:特定功能时间[重复]

    这个问题在这里已经有答案了 我想找出程序中特定函数所花费的时间 为此 我正在使用 gprof 我使用以下命令来获取特定函数的时间 但日志文件仍然显示程序中存在的所有函数的结果 请在这方面帮助我 gprof F FunctionName Ex
  • LoadLibrary:找不到指定的程序

    我需要在 Windows 2003 服务器中提取一些有关系统进程的信息 是的 在 2019 年 我用 python 编写了该代码 并使用auto py to exe 当我运行 exe文件在服务器上 我收到一条错误消息 LoadLibrary
  • 如何在 Eclipse 中使用 glassfish 适配器进行热部署

    有没有人获得 glassfish v3 适配器来与 Eclipse 一起使用 而无需每次代码更改时都重新启动 我尝试进行设置 但每次我更改任何文件时适配器都会 重新发布 这非常烦人 最多需要 3 分钟 并且会锁定我的机器一秒钟 我必须记住在
  • 批处理文件:在FOR循环中跳过以_开头的文件夹

    我想排除所有以 无需在排除文本文件中列出每个配置文件 是否有可能做到这一点 echo off set Target D backup for f tokens I in dir a d h b SystemDrive Users do if
  • 通过简单的适配器在imageview中显示位图图像

    我从网址获取图像 我在列表视图中使用图像视图 我想将位图图像列表添加到列表项的每一行中 我使用 SimpleAdapter 但图像视图显示空白 我的代码如下 ArrayList