【发布时间】:2014-01-11 11:44:23
【问题描述】:
我有一种方法可以将许多标记添加到 Google 地图。
这是我的代码:
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);
我收到此错误:
引发了“Android.OS.NetworkOnMainThreadException”类型的异常。
我做了一些研究,我认为我需要在获取位图时在另一个线程上运行该操作。
我可以就这段代码寻求帮助吗? AsyncTask 是否返回 Bitmap,或者我如何将两者结合在一起?
提前致谢。
编辑
我正在使用 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);
}
}
}
}
我遇到了很多错误。我是否将此代码放置在正确的区域?
【问题讨论】:
-
在安卓文档中搜索异步任务..
-
这里没有错误。请在活动中显示您的代码。我认为问题在于那个。
-
@Override和extends是 Java 单词。在 C# 中,您需要更改它们,例如override在声明中并使用:。或者,您可以查看此Async Support Overview in Xamarin
标签: android url bitmap android-asynctask xamarin