在我的main class
中,我致电map activity
。创建地图并获取位置并在地图中显示用户后,我致电asynctask
以连接某些sites
以获取活动。
我将location
作为string
后,我需要geocode
获取lat
和lng
值,以便将用户显示为{{1} }或list
。
在map
的{{1}}中,我已经background
个网站了。这需要1-2分钟。
之后,我应该调用地理编码的父类方法,将字符串位置作为参数传递吗?因为在那个背景方法中,我无法导入地理编码器,我无法定义私有物品,我不能将球形导入到计算机中。
调用父类方法是好事吗?
这是地理编码器,但我还没有添加到我的项目中。现在是基本的,我会改进。
asynctask
这是来自doitbackground的片段
connect
我无法在找到if (Geocoder.isPresent()) {
geocoder = new Geocoder(this);
try {
From_geocode = geocoder.getFromLocationName(" berlin ", 1);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (!From_geocode.isEmpty()) {{
System.out.println("2");
From_geocode.get(0).getLatitude(); // getting
// latitude
From_geocode.get(0).getLongitude();
sLat = From_geocode.get(0).getLatitude();
sLong = From_geocode.get(0).getLongitude();
LatLng latlng=new LatLng(sLat,sLong);
LatLng latlng2=new LatLng(41,28);
Log.d("mytag", "LATITUTE=====" + sLat + " LONGITUTE=====" + sLong);
Log.d("mytag", "LATITUTE=====" + latlng2.latitude + " LONGITUTE=====" +latlng2.longitude);
// for(Address adr: From_geocode){
// Log.d("mytag",adr.toString());
// }
Log.d("mytag",String.valueOf(SphericalUtil.computeDistanceBetween(latlng, latlng2)) );
}}
}
之前更新ui并计算if (eventEndDate.get(Calendar.DAY_OF_MONTH)>=currentDate.get(Calendar.DAY_OF_MONTH)//if today
&& eventStartDate.get(Calendar.DAY_OF_MONTH)<=currentDate.get(Calendar.DAY_OF_MONTH)
&& eventStartDate.get(Calendar.HOUR_OF_DAY) <= currentDate.get(Calendar.HOUR_OF_DAY) + 1 &&//and hour,start in 1 hour
currentDate.get(Calendar.HOUR_OF_DAY) <= eventEndDate.get(Calendar.HOUR_OF_DAY)) {
Log.d(TAG, "name:" + name + "\nlocation:" + location);
//Log.d(TAG,"type:"+type);
Log.d(TAG, "sdate:" + formatter.format(sDate.getTime()));
Log.d(TAG, "edate:" + formatter.format(eDate.getTime()));
//Log.d(TAG,"today:"+formatter.format(currentDate.getTime()));
//Log.d(TAG,m.group(2));}
locationn.add(location);
typee.add(type);
namee.add(name);
strt.add(eventStartDate);
end.add(eventEndDate);
}//end of if
并找到最接近的人。我只找到background.i中的所有地方都无法通过gps coordinates
,因为有很多关于所有事件的数组。我不想使用对象或包装器。所以我应该在distance
内完成。并希望用asynctask中的最近事件更新ui。
更新ui后,asynctask将完成。当用户点击其中一个事件时,我将如何检索有关它的信息?我不会从asynctask返回任何内容。在更新ui后asynctask结束。我必须返回数组吗?
答案 0 :(得分:0)
在没有看到你的代码的情况下,我不得不在这里做一些猜测,但一般的模式是
doInBackGround(){
// do the work
}
onPostExecute(){
// update the ui
}
对于我认为您希望实现的目标,我建议您将父类的依据传递给Asynctask。
// so the constuctor
MapClass parent;
public MyAsyncTask(MapClass map)
{
this.parent = map
}
现在如果你想将数据传递给父类,那么在你的map类中创建一个名为例如
的方法public void setPlacesToParty(String[] parties){
}
现在你在AsyncTask
onPostExecute(Sting[] parties){
parent.setPlacesToParty(parties);
}
你必须修改它以满足你的需要
参考您的具体问题
1)调用父类方法是否好事? -YES将辛苦工作加载到后台线程将使您的应用程序外观和感觉更好
2)上面回答我希望
3)我不会从asynctask返回任何内容。在更新ui后asynctask结束。我必须返回数组吗? -NO你可以修改类以返回你想要的任何内容,如果你有一个非常特定的数据结构,你可以创建一个自定义类并返回该类的对象数组。