使用 ProgressDialog 直到从 Web 服务加载 GridView

2024-02-28

我正在从 Web 服务获取 GridView 的图像和文本,因此需要一些时间才能显示 GridView。我想显示一个 ProgressDialog 直到网格完全加载。到目前为止我所做的如下:

public class PCGridMain extends Activity
{
    WebService web = new WebService();
    private GridView gridView;
    ProgressDialog dialog;
    Bitmap icon;


    int i, total;
    URL url= null;
    List<GridItem> list;

    @Override
    public void onCreate(Bundle grid)
    {
        super.onCreate(grid);
        dialog = ProgressDialog.show(PCGridMain.this, "Loading...", "Loading App, Please wait.", true);
        DialogWork dWork = new DialogWork();
        dWork.execute();

        setContentView(R.layout.main);
        gridView = (GridView)findViewById(R.id.gridView1);

        web.WebService1();       
        total = web.totalService;        



        list = new ArrayList<GridItem>();

        for(i=0; i<total; i++)
            {
                    Log.v("Try Block", "See what we get:-");
                    try 
                    {
                        Log.v("GridMain", "try url"  + Integer.toString(i));
                        url = new URL(web.arr[i][2]);
                    }
                    catch (MalformedURLException e)
                    {   
                        Log.v("GridMain", "catch MalformedURLException" + Integer.toString(i));
                        e.printStackTrace();
                    }


                    try
                    {
                        Log.v("GridMain", "try BitmapFactory"  + Integer.toString(i));
                        icon = BitmapFactory.decodeStream(url.openConnection().getInputStream());
                    } 
                    catch (IOException e)
                    {   
                        Log.v("GridMain", "catch IOException"  + Integer.toString(i));
                        e.printStackTrace();
                    }

                    list.add(new GridItem(icon, web.arr[i][1]));                    // Adding Icon & LAbel              

            }

        gridView.setAdapter(new GridAdapter(this, list));
        gridView.setOnItemClickListener(Itemlistener);
    }



    private OnItemClickListener Itemlistener = new OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int position, long id)
        {
            ViewHolder holder = (ViewHolder)view.getTag();

            if(holder == null)
            {
                return;
            }
            Toast.makeText(PCGridMain.this, holder.label.getText(), Toast.LENGTH_SHORT).show();
                                                                                Log.v("GridMain", "Intent Creation");
            Intent intent = new Intent(view.getContext(), ShowService.class);   Log.v("GridMain", "Intent Created");
            intent.putExtra("ServiceId", web.arr[position][0]);                 Log.v("GridMain", "ValueAdded Sid");
            intent.putExtra("SName", holder.label.getText());                   Log.v("GridMain", "ValueAdded SName");

            startActivity(intent);          

        }
    };

    class DialogWork extends AsyncTask<URL, Integer, Long>
    {       
        protected Long doInBackground(URL... params) 
        {
            try
            {

            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            return null;
        }

        protected void onProgressUpdate(Integer... progress)
        {

        }

        protected void onPostExecute(Long result)
        {
            try
            {
                //setContentView(R.layout.main);
                //gridView.setAdapter(new GridAdapter(PCGridMain.this, list));              
                dialog.dismiss();                   
            }
            catch (Exception e)
            {
                e.printStackTrace();
                dialog.dismiss();
            }
        }

    }

请告诉我什么代码必须放置在什么确切位置,每当我进行一些更改时,它要么显示没有效果,要么应用程序由于某些问题而关闭。

Thanks,

Haps.


尝试将来自服务器的所有渲染部分放入 doInBackground() 中,并在 onPostExecute() 中设置适配器。甚至在 onPreExecute() 中启动进度对话框并在 onPostExecute() 中关闭它,但不在 onCreate() 中关闭它。我认为这会解决你的问题......

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

使用 ProgressDialog 直到从 Web 服务加载 GridView 的相关文章

随机推荐

  • Subsonic - 如何使用 SQL 架构/所有者名称作为命名空间的一部分?

    我刚刚开始使用 Subsonic 2 2 到目前为止印象深刻 认为它会节省我一些认真的编码时间 在我开始全职使用它之前 尽管有些事情困扰着我 我想解决一下 在我当前的数据库 SQL2008 数据库 中 我已按架构 所有者名称将表 视图 sp
  • 是否可以通过插件在 Firefox 上设置配置设置

    我正在寻找一种从网络打印而不提示打印对话框的方法 我刚刚提出了问题 https stackoverflow com questions 5809102 how to print from web without prompting a pr
  • 如何进行函数复合?

    在相当不耐烦地等待 Java 8 发布并阅读精彩文章之后Brian Goetz 的 Lambda 状态 文章 http cr openjdk java net briangoetz lambda lambda state final htm
  • 操作必须使用可更新查询/SQL - VBA

    我正在尝试创建一个非常动态的宏 它将根据用户的选择更新数据库中的不同表 当然 每个表都有不同的标题和信息 我在更新时遇到问题 当用户将新记录添加到旧表时 这是代码的一部分 问题是当它到达 update 时 我收到 操作必须使用可更新查询 错
  • Hibernate:为什么 FetchType.LAZY 注释的集合属性急切加载?

    我尝试实现简单的one to many协会 使用调试模式检查项目对象后 我发现List
  • scrapy中如何根据url过滤重复请求

    我正在使用 scrapy 和 CrawlSpider 为网站编写一个爬虫 Scrapy 提供了一个内置的重复请求过滤器 可以根据 url 过滤重复请求 另外 我可以使用过滤请求rules爬行蜘蛛成员 我想做的是过滤请求 例如 http ww
  • matplotlib:子图背景(轴面+标签)颜色[或图/轴坐标系]

    我有一个包含 3x2 子图的图形 我想在中间一对子图上设置背景颜色 以便更清楚哪些轴标签属于哪个子图 Setting facecolor构建子图时 仅更改轴定义的区域的颜色 刻度线和轴标签仍然绘制在figure patch 假设没有简单的方
  • ionic 使用获取上一页名称

    我用的是离子2 我需要获取上一页的名称 这是我的代码 ViewChild Nav nav Nav constructor this nav app viewDidEnter subscribe view gt console log Cur
  • 在 Openlayers 中单击地图外部时如何激活功能 + 弹出窗口?

    我正在重新解析已加载到地图上的 KML 类似于此处的示例 http openlayers org dev examples sundials html http openlayers org dev examples sundials ht
  • 适用于 SQL Server 的 Microsoft OLE DB 提供程序是否支持 TLS 1.2

    我们的客户端最近从 TLS 1 0 升级到 TLS 1 2 此后我们的软件无法与 SQL Server 连接 它使用 OLE DB 提供程序连接到 SQL 服务器 以下是从 SQL 服务器返回的错误 DBNETLIB ConnectionO
  • 有什么方法可以在不更改格式的情况下比较 Git 中的两个文件吗?

    我已经提交了一些具有某种格式的代码 但源有一些其他格式 审阅者要求我恢复所有更改 我正在寻找一些 UI 工具或 Git 中的某种方式来删除格式并给出实际结果 我想你可能会看看 git diff 特别是以下两个选项 b ignore spac
  • Qt Mac(删除编辑菜单中的“特殊字符...”操作

    我正在 Qt 中开发一个应用程序 它经常重建其菜单 然而 当我们调用clear 并在菜单中重新添加我们想要的操作时 特殊字符 似乎保留在菜单中 有什么方法可以删除或将此操作移动到 QMenu 的底部吗 这是重建菜单的代码 void Main
  • 从用户上下文中的守护进程启动代理

    我有一个启动守护程序 它在 Mac OSX 10 6 计算机的登录上下文中运行 我想从该代理为每个用户启动一个代理 并让该代理在用户的登录上下文中运行 但是 我需要非常仔细地控制代理应用程序的精确参数 这就是为什么我不能使用 launchd
  • 如何在cocos 2d中移动背景

    你好 我想开发像 涂鸦跳跃 这样的游戏 但是我对以下功能有一些问题 1 如何移动背景场景 图像 2 如何检测对象之间的碰撞 是否需要像box2d这样的物理引擎 或者我应该使用手动碰撞 3 背景图片的大小应该是多少 4 事实上我不知道背景是如
  • 解决方案资源管理器中的引用未更新

    我通过解决方案资源管理器添加了对我的 C Windows 项目的一些引用 当我尝试在另一台计算机上加载相同的项目时 我在 Visual Studio 无法检测到的所有引用上看到黄色标记 因此 我安装了所有被引用的库 但 Visual Stu
  • 在继续 Google Apps 脚本之前等待异步请求返回

    我当前正在生成的 Google Apps 脚本中的一些代码需要一个对象来完成 其中一个属性由异步请求的结果设置 这个对象 特别是这个属性 稍后会被使用 但是 由于在需要该属性的函数运行时请求尚未返回 因此它们无法正确评估 我的代码如下 fu
  • 字符数组的初始值设定项字符串太长 C

    我正在开发一个程序 它接受输入并输出与输入相对应的数值 我在 char 部分收到错误 我不明白为什么当数组中只有 27 个字符且大小为 27 时会出现这样的错误 int main char greek 27 ABGDE ZYHIKLMNXO
  • 为三个不同标识符之间的任意匹配组合创建单个 ID

    我的客户数据来自多个不同的系统 具有三个潜在的唯一标识符 我们需要创建一个新 ID 可用于链接三个标识符之间的任何匹配项 数据结构如下 Primary Key CustomerID1 CustomerID2 CustomerID3 1 Al
  • 如何判断 HTML5 音频元素是否正在使用 Javascript 播放

    我有一个audio网页中的元素 我想确保用户在离开页面时不会仍在播放它 我怎样才能确定audio页面卸载时元素未播放 到目前为止 我有以下代码 但它似乎不起作用 卸载报告时弹出的对话框playing is false即使音频正在播放
  • 使用 ProgressDialog 直到从 Web 服务加载 GridView

    我正在从 Web 服务获取 GridView 的图像和文本 因此需要一些时间才能显示 GridView 我想显示一个 ProgressDialog 直到网格完全加载 到目前为止我所做的如下 public class PCGridMain e