【发布时间】:2015-04-23 15:56:12
【问题描述】:
我需要使用位图图像作为 Marker.icon 。
我有 2 个 AsyncTask 类, MyTask 和 BitmapTask ,第一个检索值为 { double,double,string,string = url of my bitmap icon } 的 JSONArray,第二个使用 JSONArray 的最后一个字符串(换句话说url) 作为参数获取位图图标。
试图以这种方式获得它失败了:
MyTask 类
public class MyTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
// updateDisplay("Starting task");
//tasks.add(this);
}
@Override
protected String doInBackground(String... params) {
String content = HttpManager.getData(params[0]);
return content;
}
@Override
protected void onPostExecute(String result) {
double JsonLat = 0.0 ;
double Jsonlong = 0.0 ;
String JsonName = "" ;
String JsonIconurl = "" ;
Bitmap JsonIcon = null;
try {
JSONArray cast = new JSONArray(result);
BitmapTask icontask = new BitmapTask();
for (int i=0; i<cast.length(); i++) {
JSONObject Marker = new JSONObject(cast.get(i).toString());
stringJsonLat = Marker.getString("latitude");
stringJsonLng = Marker.getString("longitude");
Jsonlong = Double.parseDouble(stringJsonLng);
JsonLat = Double.parseDouble(stringJsonLat);
JsonName = Marker.get("title").toString();
JsonIconurl = Marker.get("icone").toString();
icontask.execute(JsonIconurl);
JsonIcon = icontask.doInBackground();
if (InArea(JsonLat,Jsonlong)) {
mMap.addMarker(new MarkerOptions().position(new LatLng(JsonLat,Jsonlong)).title(JsonName).icon(BitmapDescriptorFactory.fromBitmap(JsonIcon)));
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
protected void onProgressUpdate(String... values) {
// updateDisplay(values[0]);
}
}
BitmapTask 类
public class BitmapTask extends AsyncTask<String, Void, Bitmap>{
@Override
protected Bitmap doInBackground(String... params) {
Bitmap bmImg = null;
try {
URL url = new URL(params[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bmImg = BitmapFactory.decodeStream(is);
}
catch (IOException e)
{
e.printStackTrace();
bmImg = null;
}
return bmImg;
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
// TODO: do what you need with resulting bitmap - add marker to map
}
};
【问题讨论】:
-
在
onPostExecute()中总是可以得到doInBackground()返回的值。参数result会包含doInBackground()返回的数据。 -
你的意思是我必须从 onPostExecute() 中获取值?
-
是的,当然。这是你能做到这一点的唯一方法..
-
但是 onPostExecute() 这是一个无效的方法,所以我不能使用:JsonIcon = icontask.onPostExecute();
-
不,不是那样的......看到这个link..希望它有帮助......
标签: android bitmap android-asynctask