Verwenden Sie eine Asynchrone Aufgabe für eine bitmap
Habe ich eine Methode fügt hinzu, dass viele Marker auf einer Google-Karte.
Hier ist mein code:
item = new MapLocation();
URL myurl = new URL("http://www.canninginc.co.nz/CanFindLocation/yes.png");
Bitmap bmp = BitmapFactory.DecodeStream(myurl.OpenConnection().InputStream);
item.icon = BitmapDescriptorFactory.FromBitmap(bmp);
item.Location = new LatLng (-41.227834, 174.812857);
item.Snippet = "Snippet2";
item.Title = "Title2";
item.ShowInfoWindowOnStartup = true;
_mapLocationList.Add(item);
Bin ich immer diese Fehlermeldung:
Ausnahme vom Typ " Android.OS.NetworkOnMainThreadException' ausgelöst wurde.
Ich habe einige der Forschung getan und ich denke ich muss die Aktion auf einen anderen thread, wenn du die Bitmap.
Kann ich etwas Hilfe mit diesem code? Hat der AsyncTask Rückkehr eine Bitmap, oder wie kann ich Band die beiden zusammen?
Vielen Dank im Voraus.
BEARBEITEN
Ich bin mit Xamarin, und gebucht haben Sie den folgenden code in eine neue Klasse:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Graphics;
namespace SimpleMapDemo
{
class MyAsyncTask extends AsyncTask<String, Void, Bitmap>
{
@Override
protected Bitmap doInBackground(String... urls) {
if (urls.length > 0) {
URL myurl = new URL("http://www.canninginc.co.nz/CanFindLocation/yes.png");
return BitmapFactory.DecodeStream(myurl.OpenConnection().InputStream);
}
return null;
}
@Override
protected void onPostExecute(Bitmap bmp) {
super.onPostExecute(bmp);
if (bmp != null) {
item = new MapLocation();
item.icon = BitmapDescriptorFactory.FromBitmap(bmp);
item.Location = new LatLng (-41.227834, 174.812857);
item.Snippet = "Snippet2";
item.Title = "Title2";
item.ShowInfoWindowOnStartup = true;
_mapLocationList.Add(item);
}
}
}
}
Bin ich immer zu viele Fehler. Bin ich platzieren Sie diesen code in den richtigen Bereich?
- Suche für asynchrone Aufgabe in der android-Dokumentation..
- Es ist kein Fehler hier. Bitte zeigen Sie Ihren code in der Aktivität. Ich denke, das problem, dass man in.
@Override
undextends
sind Java-Worte. In C#müssen Sie diese ändern, z.B.override
in der Erklärung und Verwendung von:
. Oder alternativ, können Sie Blick auf dieses Async-Support-Übersicht im Xamarin
Du musst angemeldet sein, um einen Kommentar abzugeben.
AsyncTask auszuführen ist die Aufgabe, jede Aufgabe, die im hintergrund nicht behindern oder Bremsen die Haupt-UI-thread. Es bietet drei nützliche Methoden, die sich (unter anderem) optimiert den Betrieb.
Holen Sie sich die input-Streams in doInBackground von AsyncTask wie:
Und
Können Sie auch die Bild-URL dynamisch:
Und
Beim erstellen einer Klasse, abgeleitet von
AsyncTask
müssen Sie angeben, 3 generische Parameter: Params, Progress, Result, undOverride
diedoInBackground
Funktion. Diese Funktion hat eine Signatur vonprotected Result doInBackground(Params...)
.Zurück zu Ihrer Frage, die Sie verwenden können, so etwas wie dieses:
Nach, die Sie anrufen können es auf diese Weise: