EDIT: Ich habe den "Methodenaufruf ..." Fehler behoben. Mein Hauptproblem ist nun das Laden der Bitmap von meiner URL. Ich bin anscheinend nicht richtig damit umgehen und ich bekomme java.lang.OutOfMemoryError
, wenn ich versuche, die .get()
Methode von PIcasso zu verwenden.Get Bitmap von URL mit Picasso in AsyncTask
Was ist der beste Weg, dies zu tun? Ich brauche nicht einmal das ganze Bild, nur eine Mittelaufnahme, um das Hintergrundbild auf meinem Gerät zu füllen. Aber ich kann es nicht zuschneiden, ohne es zuerst zu laden, was mein Problem ist.
So malt Ich versuche, eine Bitmap aus einer bestimmten URL zu erhalten Picasso verwenden, dann Text oben drauf und es als meine Tapete Hintergrund. Ich versuche gerade dies von onPostExecute in AsyncTask zu tun. Der Fehler Ich erhalte ist:
java.lang.IllegalStateException: Method call should not happen from the main thread.
Die Codezeile das Problem verursacht ist:
Bitmap bitmap = Picasso.with(myContext)
.load(url + ".jpg")
.fit()
.centerCrop()
.get();
und die ganze onPostExcute Funktion:
protected void onPostExecute(String url) {
ImageView imageView = (ImageView) rootView.findViewById(R.id.preview);
try {
Bitmap bitmap = Picasso.with(myContext)
.load(url + ".jpg")
.fit()
.centerCrop().get();
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setColor(Color.RED); //Text Color
paint.setStrokeWidth(72); //Text Size
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); //Text Overlapping Pattern
canvas.drawBitmap(bitmap, 0, 0, paint);
canvas.drawText("Test...", 10, 10, paint);
((ImageView) rootView.findViewById(R.id.preview)).setImageBitmap(bitmap);
WallpaperManager wallpaperManager = WallpaperManager.getInstance(myContext);
//wallpaperManager.suggestDesiredDimensions(width, height);
wallpaperManager.setBitmap(bitmap);
Toast.makeText(myContext, "Wallpaper set successfully.", Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
android.util.Log.e(TAG, "Failed to set wallpaper", e);
}
}
Ich habe nicht einmal gewesen in der Lage, den gesamten Canvas/Farbcode zu testen, um zu sehen, ob es funktioniert. Wenn Sie dort auch etwas falsch sehen, lassen Sie es mich bitte wissen. Alle und alle Tipps werden sehr geschätzt. Vielen Dank.
überprüfen, ob diese http://stackoverflow.com/a/27180835/2686502 hilft – jayeshsolanki93
Picasso macht Async für dich, warum benutzt du eine AsyncTask? Und was Sie tun müssen, würde teilweise in die 'doInBackgroundMethod' gehen, falls Sie Picasso mit Ihrer asynchronen Aufgabe kombinieren möchten. Gib das geladene und modifizierte Bild zurück und setze es in 'onPostExecute'. – zapl