我需要从base64图像中获取图像并将其设置为位图图像的背景。我无法看到背景图像在变化。我也使用异步任务来避免主线程上的网络。这是代码:
public class MainActivity extends Activity {
ImageView templateImage;
String templateImageURL;
Bitmap bm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
templateImage = (ImageView) findViewById(R.id.templateImage);
templateImageURL = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5OjcBCgoKDQwNGg8PGjclHyU3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N//AABEIAH8AqQMBIgACEQEDEQH/xAAbAAADAQEBAQEAAAAAAAAAAAADBAUCAQYAB//EAEUQAAEDAgIFCAYIBAQHAAAAAAEAAgMEERIhBTFBUWETIkJScYGRoRQjMsHR4QYVYnKCkrHwQ1NjoiSj0uIzNDVEVFVz/8QAGQEAAwEBAQAAAAAAAAAAAAAAAQIEAwAF/8QAJhEAAgEEAQQCAgMAAAAAAAAAAAECAxESEwQhMUFRFGEisQUVQv/aAAwDAQACEQMRAD8A9VHUPtZrWDtRLSnVh7ipgqT1URtQdgKq3FOJQEcl/wDiNHemGscB7TCpPLO23C0KkjpBHcHAqHD0neBuiRgWyc6ykCqz1+a2Kjj5rt52Baa1u0uC2GQ7S5RWSuOq4CYjc89IrvkDKBTwQWye4LBsPZPfZLsa93TKMyKTY5yHyBtZvI+05yzgZfWPBEbDJb2nLvo7+tbtR+QdrBDCNq+dINx/Kvnxka3hYxFupy75B2s2wU7zzp2sO4tK7JQROP8AzkSUkmdvQXyOOQLV2/7F1jTqGJv/AHDT2IL4GNz5V3cB8Uq439pyGcG0pt4uAWUsZ7MjvD5oBmHXPesO5IIL+S4JtwMAr5mdfLuWOWi6yA4xcFm8XBduBgLCdu9EbUDeooqxtsiNq9zbryHNlmKLBqL9IL4SX2hShUg9Gy2Kk7ENjDgVWuKMyQhSWTOPSCMx5OuQJXVGVMrxy23d6ailP2VIiczpSJ2B8G111m61jaNIqxSu2FNxPed6Tp5YDawJ7lQiczY0pd4JQx8GwXHcuFrztaEdpbuK+eWgavNHeY3+hRzXDW8JaUb33TcssY1qfUVUTf38lzrm0YZAJMI6SVkc0dIrM9dHsH78EhLXN4J41mzpUrDL3t66A+T7aSkrW8EB9a3etVUZk6Y86W3SCC6YdYJB1Y1AfVhaKoxHAomYdYLPKt6wUt1Us+lJ1Ji4oTFTxW21HEKGJytCc70Xx2DdEvCp3lEbVAblAFRxWhUcVm+Kx1WieibWAdXwRW1rdpC82KjitCpO9I+KzWNeJ6iOsZ1h3J2nrI7jnLxzKsjajMrTvWE+LIohWifodHVxkjnFXaOeNxGZ7l+V0+knMINwF6DRWnDiDXEWNlJOjOJTKnGquj6n6jTxRuaCA7vXZ6aMtORHep30fqfSW25QasgmdNv5CDN9jsG9QPYr9PNjxZQkq2F+pKrsEZILvNQK2ohBPOF+1J6Y0q1hc3H4FeWqdI4ne15q6NKb6Htwpao/ky3U1MdzYjxU+WpbvUWSsvtQH1XFW0+NImqVYlh9S3egOqRvUg1HFYdOd6pjx2SyqxKrqgb0N1QDtUsznehmY71qqDMnVRUdON6zy/FSzMd65yxWioszdVHwY/ctCOTqp5sVO+/J88gA2FitxwxlzccOF3RJsL+auwIMmICKTq+a0IpOoVRNG0jnRWtsBXzacPYXGIMBzwlnzQ1nZsn8nJsaV0Mk6pVJlNCC5sgALTa4JA8NiJ6NFZuGMuufaGoLtQyqNErDJ1StAP6pVF0EQBe25OqwXwhp2syjeTt5pPkhoQ8a8kJNxjou8EeKZ7DcFwsmAyEFpMbmdma04RuLv8PI4XydYZbljPixkUU+bODLmhPpJJQyMeZXjDqyTWnfpdJXm/Luva1sNgF53k4MhyDmuOolmXevpIobmzLG22wAU/wFcs/sVfNxWQnVVL5HEl7jfelHufxVJ8EfKYY2l19Ywm9l8KaC4JjLeDgFRDhxiS1efObJBLtxQyH55FWHQwMvijcANV2DNAdHSscWkWJ3hbKgkSuvJkw4tx8Fg4txVJ7Yrgcjc6zhtZcfHSi2Txv9WT+gT6hHVZNOLcVg33FURHTnnYcTdtmkW8kKcUcTQZJGx8HEA+a7AXYxE33FcudxToFE8gte12WoELWCi6nmioAzLTWR3NomtZ9oHPvAsUyykikYCGN7rXHkpv1tSOw3qSexqYi0pROxesAJ32CXL6DZDLqAWxDGDY6nAIrYGhjbktIzzbi+SUdU0J/jRndd1h5rJlopIh62Gw7CuzOsOsjNzbEHEggiLL9Ed0Be04o2k7cTFOidTH2HxBo1ZN9yJJWQU7mgyREH+o2w80c0dYcNGx1g5oAGdi2wXXUkDxgkjiAN8zYpIaTpAbyVsAGzC+x8brP1rRREg1YuMwRMbfquyGVh5tHTxi4hha8HPm2C6yGCSzTCxx60bxZSnfS7R8FojUYzbNwNwO9HH0opy4CKqoyDld07hf8AtSOoMsfZTmhiDQ0Ukr2jWQ33EhYls1hfyMjWN1kkfG6Sdp6Z7m4aqnGeQZLYD+1M01fXTkhkkTsrnnk2/tQu+7Hdn2F5Zqa7eZIeDYnLomiwhwhlGdiDHZNNNWL3aCdhBsB5Lj6mZpu617ZNxFFVBXEW5OOUiRpkGHOwJH6LBMRYcTZG7M2m57042ocQOY69s9v6oFTUTBrsMBP3iB7inVQRxJ8r6MH19RK22rN4/Rc5ChqGBwfi3HGRdfCoq3kPkp6a39V9iPJEdVVANvRaV4tcYZdfkmcvQhz0CmDMhlvcgupmA4HjE49FzR8F06XZEz1sbGEdBj9XfZAk+kNGARJa2wAk+5Bz9nWRyVkUZEbIwLHIEWA8GrPJ/Zi8Xf6VtmmaOVoGfC7HfBb+sqbe38rvguUzsUeXOinAi2j6zZciZqaZokWAfRVl9zZmorNK1e0MP4D8UQaXq8rNjt90/FRJxRpgIu0W21vq+vA1kcq3NCOjWYv+nV5/G1Vvrip2tjP4T8V0aaqB0I7cR80HOJ2okt0dCLF+iK4nbz7rYpKIGztCV5PAqt9dzfyo/wAvzWm6dlBzhYd1r/FB1I+xtTJZi0aLNdojSkf2QCQUb0XRR5x0bpAbLGKTJURpyRxHqRxIR4tME3JjAO83QdeK8jLjyZCNBom59TXNB307zbxCE3Rui434mz6QaONObfovVR6Yc7VE3FvJ1+acgr5ZZABCy++9wsXzKce5vHhTl2R411No21zV1bQP6NvcsCLRLLuZW1bDbWIwPcv1PR+iazSD2sh5BrnZXcwkIel/o9X6OlcyV1LIBqIgOYSr+RpXtcZ8CWWPk/L3DR2TY9K1WrVhQJPRrWi0tKB/8j7ivY1b5YiR6kHZaFImscLktgxfc1raPLpy7P8AZlPhVY90edwMdZzdLS5asTHD3r4scDf627yHD9Cr/wBaua2wjgbYdU5rJ00f5cXhdPti/Jk6EkQDGA0A6XA7ceRWYzMHEDTrAy+XrH6+xXnaXxi3Ix94QXV1O4kmmpnX1gs+SbYn5E1MklshJvpiJx3h5WmMIOL65iBI65+KfdVUxNxR0oI1XZ8lh89K4i9DR94/2plU+waxDDNqbpptto5QrvJS/wDtv80/BNukpNlFRfv8K5ylJ/4FH4fJddAwY02maDzgXDdcooih2Qi/3imQzgtiLgfBeS6rPSUEJmnadUVuw/NdbTtac4795TRjAOpabFvHkk2y9jKEfQARM/l2/E74rQpmnZl3/FMCPPLIIrWaskjqsdRiLsp4hqiZfeb/ABTEdMx38No7AisaEzFGLrCdWRtCMTNPQsLgQy/eq1HQw42lwYwuOEXsLncgwRZjUQqHoFHUiL0mAP5Nwey7jk4bdamlVbfVlcEl2PSaGpI4JoydQOoAgrP0k/xM7ixgyFuc0nzQ6MwRvDrOvvJJW66djwbYjfaBZY3/ACyBZ7cmeNqqAm5c2N3DAVMnoR1GDsFl6arDs8y7ZcqTUMN9YVVKu0+wtWCfkivpQNTYx4paShZrLGEfeN1VkYeslZIicy6x7F6MK7faJ58qSv1kIGhjFvVNz+0uHR8BGbQOxybLHj+IfBZc15FjIe4KiNW/+TCULPuJO0dB1T+ZAloIWtJwuHG4TroXdfy+aG6E9JybOXoXGPsk+i/ZJC+9Hb/KKfkgtqse5Y5LgENj8hwRTDVoN4eSA2ob+wiCdnHwU7oyH2IJhN9q6Gi97WKFy7DqHkuiePVZLpkHZEYaFsBKieNuxbbVt2DLsXPjyDtiPM4FHjNipzKxpzARG1wHdsSS4sjSNdFiJ2q6eilDRkNXavPs0iNgRm6SA2alPLiS9G8K6PW0FQMXOHisaRrGtPNDVAp9MRs51iT2LNbphkmZa5Zrju9rFeyON7haiucScmjsSclU52seSSk0kwkjknEdgQXVrSbe5WQ40V4IKld+xt8l+igueT0HeCEanFaxI7l8ai2vX2KmNO3ZE7nfydc77Lh2hDLt4N101OSG6oFr5eCdRl6M217OEoZ4rj6hv7CGalu8+Ca0hbo648FjDwC+5VpzzX3KM6qSUJMdSif/2Q==";
}
public class ImageDownload extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
bm = convertBitmap(templateImageURL);
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if (!templateImageURL.equals("")) {
templateImage.setImageBitmap(bm);
}
}
}
public Bitmap convertBitmap(String img) {
byte[] b = Base64.decode(img, Base64.DEFAULT);
return BitmapFactory.decodeByteArray(b, 0, b.length);
}
}
这是XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/templateImage" />
</RelativeLayout>
这是清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.imageurlproject"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.imageurlproject.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Imageview不会改变其背景,也不会看到任何异常。有人可以帮助
答案 0 :(得分:0)
试试这个:
public class ImageDownload extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
bm = convertBitmap(templateImageURL);
return bm;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if (!templateImageURL.equals("")) {
templateImage.setImageBitmap(bm);
}
}
}
因为我认为应该返回位图而不是null。
如果不起作用,请使用此方法将base64转换为位图。
public Bitmap StringToBitMap(String encodedString){
try{
byte [] encodeByte=Base64.decode(encodedString,Base64.DEFAULT);
Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
return bitmap;
}catch(Exception e){
e.getMessage();
return null;
}
}
你应该在doInBackground中使用它,并改变相对变量。