android位图未显示

时间:2013-10-03 14:33:17

标签: java android bitmap

我需要从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,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";
    }

    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不会改变其背景,也不会看到任何异常。有人可以帮助

1 个答案:

答案 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中使用它,并改变相对变量。