У меня есть метод, который добавляет много маркеров в карту Google.Использовать задачу Async для растрового изображения
Вот мой код:
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);
Я получаю эту ошибку:
Exception of type 'Android.OS.NetworkOnMainThreadException' was thrown.
Я сделал некоторые исследования, и я думаю, что нужно выполнить действие в другом потоке при получении Bitmap ,
Могу ли я помочь с этим кодом? Возвращает ли AsyncTask растровое изображение или как связать их вместе?
Заранее спасибо.
EDIT
Я использую Xamarin, и опубликовали следующий код в новый класс:
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);
}
}
}
}
Я получаю много ошибок. Я помещаю этот код в правильную область?
Поиск задачи async в документации по android .. –
Здесь нет ошибки. Пожалуйста, покажите свой код в действии. Я думаю, что проблема в этом. – Luc
'@ Override' и' extends' - это слова Java. В C# вам необходимо изменить их, например. 'переопределить' в декларации и использовать': '. Или, альтернативно, вы можете посмотреть на это [Обзор поддержки Async в Xamarin] (http://docs.xamarin.com/guides/cross-platform/advanced/async_support_overview/) – sujoy