2013-10-03 4 views
1

J'ai besoin d'extraire une image à partir d'une image base64 et de la définir comme arrière-plan pour l'image bitmap. Je n'arrive pas à voir l'image de fond changer. J'utilise une tâche async aussi pour éviter réseau sur thread principal .Ici est le code:bitmap android non affiché

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); 
    } 
} 

Voici le 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> 

Voici le

<?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> 

manifeste Le Imageview est ne change pas son contexte et je ne vois aucune exception. Pourrait quelqu'un pls aider

Répondre

0

essayez ceci:

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); 
     } 
    } 

} 

parce que je pense que le bitmap doit être retourné pas nulle.

Si cela n'a pas fonctionné, utilisez cette méthode pour convertir votre base64 en bitmap.

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; 
} 
    } 

vous devez l'utiliser dans doInBackground et modifier les variables relatives.

+0

désolé je ne vois aucune différence – user2558496

+0

avez-vous essayé deuxième metho? –