【问题标题】:ArcGIS Android Offline Map Tiles - User CredentialsArcGIS Android 离线地图切片 - 用户凭据
【发布时间】:2016-02-11 11:47:29
【问题描述】:

我正在使用适用于 Android 的 ArcGIS Runtime SDK 开发应用程序。我正在使用以下代码从 arcgis.com 访问平铺底图,该代码运行良好。

UserCredentials creds = new UserCredentials();
creds.setUserToken("token", "referer");
String mapUrlUsaTopo = "https://services.arcgisonline.com/arcgis/rest/services/USA_Topo_Maps/MapServer";
mBasemapLayer = new ArcGISTiledMapServiceLayer(mapUrlUsaTopo, creds);

但是...当我尝试下载地图图块以供离线使用时,出现以下错误:

com.esri.core.io.EsriSecurityException:消息:无法生成令牌。详细信息:必须指定“用户名”。必须指定“密码”。

这是下载代码:

String tileUrlUsaTopo = "https://tiledbasemaps.arcgis.com/arcgis/rest/services/USA_Topo_Maps/MapServer";
final ExportTileCacheTask exportTileCacheTask = new ExportTileCacheTask(tileUrlUsaTopo, creds);

唯一的选择是硬编码用户名和密码吗?

【问题讨论】:

    标签: android arcgis


    【解决方案1】:

    来自 Esri 支持的 Andrew 非常有帮助。要使用您的应用程序 ID 和密钥进行“应用程序”身份验证(没有用户名和密码),您需要类似于下面的代码。但是,android sdk 中有一个错误 (BUG-000092420),下面的代码目前无法运行。有人告诉我,该修复程序可能会进入 Quartz 最终版本。

    private class AppLoginTask extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... params) {
            Log.d("MyApp", "AppLoginTask");
            Portal p = new Portal("https://www.arcgis.com", null);
    
            try {
                p.doOAuthAppAuthenticate(APP_SECRET, APP_ID, new CallbackListener<Portal>() {
                    @Override
                    public void onCallback(Portal portal) {
                        Log.d("MyApp", "login callback");
                        //mCreds = new UserCredentials();
                        mCreds = portal.getCredentials();
                        setMapDataMode(MapDataMode.ONLINE);
                    }
                    @Override
                    public void onError(Throwable throwable) {
                        Log.e("MyApp", "login error");
                    }
    
                });
            } catch (Exception e) {
                Log.d("MyApp", "login exception");
                e.printStackTrace();
            }
            return null;
        }
    
        @Override
        protected void onPostExecute(Void results) {
            Log.d("MyApp", "login post execute");
            //setMapDataMode(MapDataMode.ONLINE);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-29
      • 2018-01-02
      • 2018-02-09
      • 2018-07-17
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      相关资源
      最近更新 更多