Android asynctask应该调用父

时间:2015-12-10 15:44:58

标签: android google-maps android-asynctask

在我的main class中,我致电map activity。创建地图并获取位置并在地图中显示用户后,我致电asynctask以连接某些sites以获取活动。

我将location作为string后,我需要geocode获取latlng值,以便将用户显示为{{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结束。我必须返回数组吗?

1 个答案:

答案 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你可以修改类以返回你想要的任何内容,如果你有一个非常特定的数据结构,你可以创建一个自定义类并返回该类的对象数组。