我正在为学生开发一个应用程序,在实际设备上测试时发现了一个错误。这是我的应用程序的一段代码。我使用这个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设备。