2016-07-10 4 views
0

Diese Frage bindet sich in meine Frage here ist aber eine Frage für sich, so geht hier, Wie würde ich konvertieren ein Byte-Array aus dem UI-Thread zeichnen, und gibt es keine aus Leistungsperspektive zeigen? die im Weg, es einen Adapters ist als Teil versucht und die Fortschrittsbalken funktionieren, aber die Bilder laden nie und gibt mir einen Fehler in Android StudioWie konvertiert man Byte-Array zu zeichnen aus dem ui Thread

here, wie im Versuch, es zu tun (nie zuvor async Aufgabe verwendet ive)

private class MyAsyncTask extends AsyncTask<Bitmap, Void, Bitmap> { 
    private byte[] data; 
    private ProgressBar progress; 
    private MyViewHolder holder; 

    public MyAsyncTask(byte[] data,ProgressBar progress,MyViewHolder holder) { 
     this.data = data; 
     this.progress = progress; 
     this.holder = holder; 
    } 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progress.setVisibility(View.VISIBLE); 
     progress.setIndeterminate(true); 
    } 
    @Override 
    protected Bitmap doInBackground(Bitmap... data) { 

     return BitmapFactory.decodeByteArray(this.data, 0, data.length); 
    } 
    @Override 
    protected void onPostExecute(Bitmap response) { 
     super.onPostExecute(response); 
     { 
     Drawable drawable = new BitmapDrawable(response); 
     holder.cardImage.setImageDrawable(drawable); 
     progress.setVisibility(View.GONE); 
     } 
    } 
} 

Dann diese Methode verwende ich es nennen:

public void startNewAsyncTask(byte[] image,ProgressBar progress,MyViewHolder holder) { 
    MyAsyncTask asyncTask = new MyAsyncTask(image,progress,holder); 
    asyncTask.execute(); 
} 

ich dies wie folgt aus meinem viewholder nennen:

startNewAsyncTask(cardmaker.getCardIcon(),holder.progress,holder); 

Das gibt mir diese Fehlermeldung:

D/skia: --- SkImageDecoder::Factory returned null 

Was früher, bevor ich die Asynchron Aufgabe war ganz einfach versucht, zu arbeiten, dies;

Drawable drawable = new BitmapDrawable(Utility.getPhoto(cardmaker.getCardIcon())); 
    holder.cardImage.setImageDrawable(drawable); 

und dass ‚Utility.getPhoto‘ sah aus wie dieses

public static Bitmap getPhoto(byte[] image) { 
    return BitmapFactory.decodeByteArray(image, 0, image.length); 
} 

Dies ist der Choreograph Frames überspringen und schließlich stürzt meine Anwendung mit einem OutOfMemoryError, die in mir wirksam der Punkt, um dies zu implementieren versucht ist, macht async Aufgabe, also wenn mein Verständnis grundlegend falsch ist, zögern Sie bitte nicht, mir zu sagen

vielen dank

Antwort

0

THIS

protected Bitmap doInBackground(Bitmap... data) { 

    return BitmapFactory.decodeByteArray(this.data, 0, data.length); 
} 

sollte diese

protected Bitmap doInBackground(Bitmap... data) { 

    return BitmapFactory.decodeByteArray(this.data, 0, this.data.length); 
} 

sein, aber es tut mir unterstrichen Ausgabe von außerhalb des Speicherfehler lösen es wirft sie gerade von einem anderen Ort