首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >android + access远程绘图-最佳实践

android + access远程绘图-最佳实践
EN

Stack Overflow用户
提问于 2012-09-24 18:29:34
回答 1查看 494关注 0票数 1

我正在开发一个应用程序,这是一个产品目录。用户可以搜索和查看产品(书籍)。它都是只读的,所以允许用户查看产品。当用户点击产品时,下一个屏幕显示-图书标题-图书作者-封面图片。

这是我有一个问题的图片部分。我知道呈现可绘制内容的一种方法是在我的android项目中以“可绘制”的方向显示它们,并以android:src="@drawable/name“的形式访问它们(在我的xml文件中)。

唯一的问题是,新产品将被添加,所以当我发布APK文件时,我不能在APK文件中存储可绘制内容。我需要在运行时读取它们。我想知道解决这个问题的最好方法是什么。

我在想在(第一次)应用程序启动时执行一个AsyncTask,它将调用HttpURLConnection的openConnection,并抓取所有可绘制的(从网站上的特定远程目录),然后将它们存储在sqllite db (作为blob)中。数据库中的每个产品都可以很容易地与其特定的绘图相关联。

不确定是否有更好的方法?或者我应该将它们保存到设备的内部存储中(我知道这个选项的大小是一个问题)。尝试按需抓取可绘制内容可能需要2-4秒(即从远程服务器获取)。有没有一种有效的方法来下载绘图文件?

更新:上面方法的唯一问题是获取远程可绘制并在设备上渲染它所需的时间( 2-7秒之间)。因此,出于性能方面的原因,我不能使用这种方法。当用户第一次启动应用程序时,它(使用ASynch任务)抓取(远程csv中的)所有产品,并将其内容存储在SQLLite数据库中。因此,在应用程序首次发布时,他们会有一个可以接受的小等待,但在那之后就没有了。我想做一些类似的事情(例如,也获取可绘制的),但不确定我应该将它们存储在内部存储中,还是将它们作为BLOB保存到数据库中。每个产品的最大大小为2-3kb,但总共可能有300个产品

任何帮助都是最好的。我正在Android 4.0.3上进行开发。

谢谢- Ro

EN

回答 1

Stack Overflow用户

发布于 2012-09-24 18:54:51

您描述的方法是执行此类任务的最佳方法。直接从网上抓取它们,这样当你改变图片时,它就会在你的手机上被改变。还有一种更简单的方式,你可以直接向用户显示图像,而不需要将它们存储到数据库中,但在你必须检查互联网连接之前。

用于检索图像的函数:

代码语言:javascript
运行
复制
public static Bitmap getBitmapFile(String str)
    {
        Bitmap bmImg=null;
        URL myFileUrl;
        try {
            myFileUrl = new URL(str);
            HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
            conn.setDoInput(true);
            conn.connect();
            InputStream is = conn.getInputStream();
            bmImg = BitmapFactory.decodeStream(is);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return bmImg;

    }

用于检查Internet连接:

代码语言:javascript
运行
复制
// declaring variable for holding Internet connection state
        boolean connected = false;
        // checking connectivity to the Internet through mobile network or WIFI
        ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
            if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || 
                    connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
                // Internet connection
                connected = true;
            }
            else
                // no Internet connection
                connected = false;

示例:

代码语言:javascript
运行
复制
            // grab image to display
            try {
                // Bitmap bmp1;
                    // String url1;
                    // ImageView img1;

                // in case there is Internet connection display image from online url
                if(connected == true)
                {
                    bmp1=MainActivity.getBitmapFile(url1); 
                    img1.setImageBitmap(bmp1);
                    }
                    else
                    {
                    img1.setImageResource(R.drawable.not_connected);
                    }
                } catch(Exception e) {

                e.printStackTrace();

            }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12563175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档