为什么我无法使用真实设备在安卓应用程序上加载互联网图像?



我正在为学生开发一个应用程序,在实际设备上测试时发现了一个错误。这是我的应用程序的一段代码。我使用这个AsynTask通过网页检索信息,效果很好。

protected void onPostExecute(PlaceRecord result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        // Refresh the values
        ImageView imageFlag = (ImageView) findViewById(R.id.imageViewFlag);
        try {
            InputStream is = (InputStream) new URL(place.getFlagUrl())
                    .getContent();
            Drawable d = Drawable.createFromStream(is, "src name");
            Log.i(TAG, "D: " + d.toString());
            if (d.toString() == "") {
                imageFlag.setImageResource(R.drawable.logo_fondo);
            } else {
                imageFlag.setImageDrawable(d);
            }
        } catch (Exception e) {
            Log.e(TAG, "que conho pasa: " + e);
            e.printStackTrace();
        } TextView textVCountry = (TextView) findViewById(R.id.textViewCountryName); 
      textVCountry.setText(place.getCountryName()); 
      TextView textVPlace = (TextView) findViewById(R.id.textViewResolverPlace);    
      textVPlace.setText(place.getPlace());         

事情是这样的,当我在我的模拟器上运行这个程序时,它是完美的。Result是一个对象,该对象具有StringcountryName、Stringplace和FlagURL,FlagURL是网络上图像的URL。当我在模拟器上运行这个程序时,我得到的图像和两个文本都很完美,但当我在真实设备上运行它时(一开始我使用了位图,但它只是崩溃了,我不知道为什么。)我帮了很多忙)然后用这个方法它不会崩溃,但当我运行它时,它不会显示任何内容。。在模拟器上,它显示,如果您更改另一个图像的url,它会显示新的,但在真实的图像上没有。

如果你愿意,我可以向你展示更多的代码,我只是不想用代码来填充这个。问题是logcat窗口没有显示任何内容。。。

重要的是,我的真实设备有android 4.2,但模拟器2.3

有客人吗?

谢谢

这是我的清单文件

<?xml version="1.0" encoding="utf-8"?>
   <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="advance.modelling.yourvistit"
     android:versionCode="1"
     android:versionName="1.0" >
     <uses-sdk
         android:minSdkVersion="10"
         android:targetSdkVersion="19" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <application
         android:allowBackup="true"
         android:icon="@drawable/ic_launcher"
         android:label="@string/app_name"
         android:theme="@style/AppTheme" >
         <activity
             android:name="advance.modelling.yourvisit.MainActivity"
             android:label="@string/app_name" >
             <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </application>

     </manifest>

您必须在后台线程中使用internet。将下载图像的代码移动到AsyncTask类的doInBackground()函数中。在onPostExecute中,您应该在ImageView中设置已下载的图像(因为您只能在主线程中处理视图)

在主线程中获取图像只能用于旧的Android设备。

相关内容

最新更新