android从url显示图像时出错

时间:2011-09-15 06:23:56

标签: android imageview

当我使用下面的代码从url显示图像时,应用程序花费了太多时间从服务器加载图像。如果我们要加载8-10张图片,应用程序就会挂起。

Bitmap mbmp = BitmapFactory.decodeStream(new java.net.URL("urlname").openStream());
Imageview_ref.setImageBitmap(mbmp);

并在 Logcat

中获取此信息
09-15 11:34:14.265: ERROR/Cursor(14443): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.UserLogin/databases/sample.db, table = null, query = SELECT LocationName , LocationImage FROM Locationlist
09-15 11:34:14.265: ERROR/Cursor(14443): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
09-15 11:34:14.265: ERROR/Cursor(14443):     at com.UserLogin.FindPlaces.getallLocs(FindPlaces.java:134)
09-15 11:34:14.265: ERROR/Cursor(14443):     at com.UserLogin.FindPlaces.onCreate(FindPlaces.java:37)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:651)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.widget.TabHost.setCurrentTab(TabHost.java:323)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:129)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:453)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.view.View.performClick(View.java:2408)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.view.View$PerformClick.run(View.java:8816)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.os.Handler.handleCallback(Handler.java:587)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.os.Looper.loop(Looper.java:123)
09-15 11:34:14.265: ERROR/Cursor(14443):     at android.app.ActivityThread.main(ActivityThread.java:4627)
09-15 11:34:14.265: ERROR/Cursor(14443):     at java.lang.reflect.Method.invokeNative(Native Method)
09-15 11:34:14.265: ERROR/Cursor(14443):     at java.lang.reflect.Method.invoke(Method.java:521)
09-15 11:34:14.265: ERROR/Cursor(14443):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-15 11:34:14.265: ERROR/Cursor(14443):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-15 11:34:14.265: ERROR/Cursor(14443):     at dalvik.system.NativeStart.main(Native Method)

有了这个logcat错误消息我还在输出。

这是我更新的代码视图..

public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View v = convertView;
            if(v == null){
                LayoutInflater vl = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vl.inflate(R.layout.placeslist, null);
            }
            Fields o = results.get(position);

            if (o != null) {
                TextView iv = (TextView)v.findViewById(R.id.toptext);
                ImageView tv_Image = (ImageView)v.findViewById(R.id.Locimage);

                iv.setText(o.getLocationName());                            

                try {
                    Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL(o.getLocationImage()).getContent());
                    tv_Image.setImageBitmap(bitmap);
                } catch (Exception e) {
                    e.printStackTrace();
                }


            }
            return v;
        }       
    }

2 个答案:

答案 0 :(得分:3)

logcat表示您没有关闭光标数据库

onDestroy()您的活动方法,添加此

try{
   cursor.close();
   db.close(); 
}catch(exception e)
{}

答案 1 :(得分:1)

请试试这个::

            try {
        Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL(
                "http://xyz.com/a/f/a.png")
                .getContent());
        tran_btn_skip.setImageBitmap(bitmap);
    } catch (Exception e) {
    }

确保您必须获得互联网许可