等待位置数据时从服务器获取数据的功能放置在哪里

Posted

技术标签:

【中文标题】等待位置数据时从服务器获取数据的功能放置在哪里【英文标题】:Where to place function to fetch data from server when waiting for location data 【发布时间】:2015-05-31 12:56:04 【问题描述】:

我正在构建一个应用程序,该应用程序必须根据 Google Play 服务位置 API 获得的纬度和经度从服务器获取数据。我无法弄清楚将函数放置在何处以获取位置并从服务器获取数据。我会更好地解释我。当应用程序启动时,我必须获取最后一个已知位置,并且我已经看到这是可能的

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    CurrentGeolocation currentGeolocation = CurrentGeolocation.get(getActivity());


@Override
public void onStart() 
    super.onStart();
    mCurrentGeolocation.connectGoogleApiClient();

当前地理位置

public static CurrentGeolocation get(Context appContext) 
        if (sCurrentGeolocation == null) 
            sCurrentGeolocation = new CurrentGeolocation(appContext.getApplicationContext());
        
        return sCurrentGeolocation;
    

    private CurrentGeolocation(Context appContext) 
        mAppContext = appContext;
        mRequestingLocationUpdates = true;
        // create the POJO to store the last known location
        mCurrentGeolocationEntity = new CurrentGeolocationEntity();
        buildGoogleApiClient();
        createLocationRequest();
    

    @Override
    public void onConnected(Bundle bundle) 
        Log.i(TAG, "Connected to GoggleApiClient");
        if (mCurrentGeolocationEntity.getmLastLocation() == null) 
            mCurrentGeolocationEntity.setmLastLocation(LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient));
        

        if (mRequestingLocationUpdates) 
            startLocationUpdates();
        
    

我的问题是我不知道从服务器检索数据的功能到底在哪里。我正在使用 Volley 库,并且我已经编写了数据。你有什么建议?

【问题讨论】:

您是否遵循特定的工作流程或流程来获取数据?如果没有,为什么不把它放在 onConnected 中? 我的想法是正确的,但我的问题是如果我没有它们的可见性,如何填充片段中的字段 在我看到的每个示例中,所有的东西都被合并到一个活动或一个片段中,但是在一个真正的应用程序中,将所有内容合并到一个活动中是非常不可想象的,而且我有一些问题想象一下如何链接一切 【参考方案1】:

如果您担心由于片段尚未加载而导致片段的可见性,您可以尝试 2 件事。第一个是使用 ViewTreeObserver。您可以使用 ViewTreeObserver 等待您的片段或视图完成加载然后获取您的数据。这是一个使用视图的示例:

 ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
    if (viewTreeObserver.isAlive()) 
      viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() 
        @Override
        public void onGlobalLayout() 
          yourView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
          // Do your fetch and data insert to view here.

        ...
        
      );
    

您可以尝试的下一个方法是使用 runnable 进行获取。示例:

YourLayout = (RelativeLayout) findViewById(R.id.BoxesLinearLayout);
YourLayout .post(new Runnable() 
    @Override
    public void run() 
        // Do your fetch and data insert to view here.

        ...
    
);

【讨论】:

但是我应该把它们放在哪里?在 onConnected 里面? 据我了解,是的,在 onConnected() 部分内。 但我在 CurrentGeolocation 内部没有任何对视图的引用

以上是关于等待位置数据时从服务器获取数据的功能放置在哪里的主要内容,如果未能解决你的问题,请参考以下文章

骨干路由器:等待首先获取数据

在设备位置关闭时从 Google Play 服务获取最后一个已知位置

jQuery Datatable:服务器端处理以在单击 Next 时从 DB 中获取数据

放置图钉并从用户在地图上点击的位置获取地址

想要在设备离线时将数据存储在本地数据库中,并在在线时从数据库中获取并发送到服务器

在选项卡式应用程序中的何处放置位置代码?