Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android asynctask应调用父对象的方法_Android_Google Maps_Android Asynctask - Fatal编程技术网

Android asynctask应调用父对象的方法

Android asynctask应调用父对象的方法,android,google-maps,android-asynctask,Android,Google Maps,Android Asynctask,在我的主类中,我调用映射活动。创建地图并在地图中确定位置并显示用户后,我调用asynctask连接某些站点以获取事件 在我将位置作为字符串之后,我需要地理编码来获取纬度和液化天然气值,以列表或地图的形式向用户显示周围的位置 在asynctask的background中,我已经连接了网站。需要1-2分钟 在那个之后,我是否应该调用geocode的父类的方法,将字符串locaitions作为参数传递?因为在那个背景方法中,我不能导入地理编码器,我不能定义私有的东西,我不能导入到计算距离 调用父类方法

在我的
主类中
,我调用
映射活动
。创建地图并在地图中确定位置并显示用户后,我调用
asynctask
连接某些
站点
以获取事件

在我将
位置
作为
字符串
之后,我需要
地理编码
来获取
纬度
液化天然气
值,以
列表
地图
的形式向用户显示周围的位置

asynctask
background
中,我已经连接了
网站。需要1-2分钟

在那个之后,我是否应该调用geocode的父类的方法,将字符串locaitions作为参数传递?因为在那个背景方法中,我不能导入地理编码器,我不能定义私有的东西,我不能导入到计算距离

调用父类方法是件好事吗

这是geocoder,但我还不能添加到我的项目中。这是基本的现在,我会提高

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)) );
    }}
    }
这是doitbackground的片段

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
if(eventEndDate.get(Calendar.DAY\u OF\u MONTH)>=currentDate.get(Calendar.DAY\u OF\u MONTH)//if今天

&&eventStartDate.get(Calendar.DAY\u OF_MONTH)如果没有看到您的代码,我不得不在这里进行一些猜测,但一般模式是

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){
}
现在在你身上你完成了一项任务

onPostExecute(Sting[] parties){
   parent.setPlacesToParty(parties);
}
您必须修改此项以满足您的需要

关于你的具体问题

1) 调用父类方法是件好事吗?
-是的,将繁重的工作卸载到后台线程将使你的应用程序看起来和感觉更好

2) 我希望上面有答案

3) 我不会从asynctask返回任何内容。并且asynctask在更新ui后完成。我必须返回数组吗?
-不,您可以修改类以返回您想要的任何内容,如果您有一个非常特定的数据结构,您可以创建一个自定义类并返回该类的对象数组。

没有看到您的全部代码,我不得不在这里进行一些猜测,但一般模式是

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){
}
现在在你身上你完成了一项任务

onPostExecute(Sting[] parties){
   parent.setPlacesToParty(parties);
}
您必须修改此项以满足您的需要

关于你的具体问题

1) 调用父类方法是件好事吗?
-是的,将繁重的工作卸载到后台线程将使你的应用程序看起来和感觉更好

2) 我希望上面有答案

3) 我不会从asynctask返回任何内容。并且asynctask在更新ui后完成。我必须返回数组吗?
-不,您可以修改类以返回您想要的任何内容,如果您有一个非常特定的数据结构,您可以创建一个自定义类并返回该类的对象数组。

最好粘贴一些代码,这样我们就可以了解您所说的内容。我想您应该看看
ASyncTask
onpostreult
方法。同意。签出异步任务。这里的官方文档中还有一个很好的例子:如果您想调用父对象上的方法,请通过构造函数或可以提供的参数将父对象实例发送给AsyncTask。然后在OnPostExecute()中调用父方法。您的意思是OnPostExecute(结果)?它更新了用户界面。在找到gps坐标和计算距离并找到最近的坐标之前,我无法更新ui。我只能在后台找到所有位置。我无法传递结果,因为所有事件都有很多数组。我不想使用对象或包装器。所以我应该完成这项任务。并且想用最接近的事件更新ui在AsyncTask的doInBackground中完成所有繁重的工作,然后在onPostExecute中更新ui。粘贴一些代码以便我们了解您所谈论的内容是很好的。我想您应该看看
AsyncTask的
OnPostResult
方法。同意。签出异步任务。这里的官方文档中还有一个很好的例子:如果您想调用父对象上的方法,请通过构造函数或可以提供的参数将父对象实例发送给AsyncTask。然后在OnPostExecute()中调用父方法。您的意思是OnPostExecute(结果)?它更新了用户界面。在找到gps坐标和计算距离并找到最近的坐标之前,我无法更新ui。我只能在后台找到所有位置。我无法传递结果,因为所有事件都有很多数组。我不想使用对象或包装器。所以我应该完成这项任务。想用最接近的事件更新ui在AsyncTask的doInBackground中完成所有繁重的工作,然后在onPostExecute中更新ui。那么,按照您提到的方法将字符串数组传递给main以更新main中TextView中的ui,或者将mainmap activty传递给AsyncTask postexecute以更新那里的ui?哪一个,我还是不能决定。我要做的是,我将删除地图并显示所有文本。所以,我创建了另一个空柱面布局,也许我可以使用fragment,或者我应该为activity创建另一个类?对不起,mike,我不明白你的问题?你能为我澄清一下吗;对于这些,我无法理解如何使用父类中的参与方。因此,在您提到的方法中将字符串数组传递给main以更新main中TextView中的ui,或者将mainmap activity传递给asynctask postexecute以更新那里的ui?哪一个,我仍然无法决定。我要做的是,我将删除地图并显示所有文本。所以,我创建了另一个空柱面布局,也许我可以使用fragment,或者我应该为activity创建另一个类?对不起,mike