我爱编程&编程爱我 2020-08-21 19:10 采纳率: 0%
浏览 393

Android Studio下开发高德地图中使用离线地图无法获取离线城市列表?

在导入高德离线地图UI组件时,手机上一直提示“正在获取离线城市列表”,是什么地方导致的问题?

图片说明
布局文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/grey"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/back_image_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:src="@drawable/offline_back" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true" >

            <TextView
                android:id="@+id/download_list_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/offlinearrow_tab1_pressed"
                android:paddingLeft="20dp"
                android:paddingRight="20dp"
                android:paddingTop="10dp"
                android:paddingBottom="10dp"
                android:text="@string/all_offline"
                android:textSize="15sp" />

            <TextView
                android:id="@+id/downloaded_list_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/offlinearrow_tab2_normal"
                android:paddingLeft="20dp"
                android:paddingRight="20dp"
                android:paddingTop="10dp"
                android:paddingBottom="10dp"
                android:text="@string/download_offline"
                android:textSize="15sp" />
        </LinearLayout>
    </RelativeLayout>


    <androidx.viewpager.widget.ViewPager
        android:id="@+id/content_viewpage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1.0"
        android:flipInterval="30"
        android:persistentDrawingCache="animation" />

</LinearLayout>

java代码如下:

package com.dji.gaodemapdemo.offlinemap;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.core.view.ActionProvider;
import androidx.viewpager.widget.ViewPager;

import com.amap.api.maps.AMapException;
import com.amap.api.maps.offlinemap.OfflineMapCity;
import com.amap.api.maps.offlinemap.OfflineMapManager;
import com.amap.api.maps.offlinemap.OfflineMapManager.OfflineLoadedListener;
import com.amap.api.maps.offlinemap.OfflineMapManager.OfflineMapDownloadListener;
import com.amap.api.maps.offlinemap.OfflineMapProvince;
import com.amap.api.maps.offlinemap.OfflineMapStatus;
import com.dji.gaodemapdemo.R;

import java.util.ArrayList;
import java.util.List;


public class OfflineMapActivity_Old extends Activity implements
        OfflineMapDownloadListener, OnClickListener, ViewPager.OnPageChangeListener, OfflineLoadedListener {

    private OfflineMapManager amapManager = null;// 离线地图下载控制器
    private List<OfflineMapProvince> provinceList = new ArrayList<OfflineMapProvince>();// 保存一级目录的省直辖市


    private TextView mDownloadText;
    private TextView mDownloadedText;
    private ImageView mBackImage;


    private ViewPager mContentViewPage;
    private ExpandableListView mAllOfflineMapList;
    private ListView mDownLoadedList;

    private OfflineListAdapter adapter;
    private OfflineDownloadedAdapter mDownloadedAdapter;
    private OfflinePagerAdapter mPageAdapter;



    private ProgressDialog initDialog;


    private final static int UPDATE_LIST = 0;

    private final static int SHOW_MSG = 1;

    private final static int DISMISS_INIT_DIALOG = 2;
    private final static int SHOW_INIT_DIALOG = 3;

    private Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            switch (msg.what) {
            case UPDATE_LIST:
                if (mContentViewPage.getCurrentItem() == 0) {
                    ((BaseExpandableListAdapter) adapter)
                            .notifyDataSetChanged();
                } else {
                    mDownloadedAdapter.notifyDataChange();
                }

                break;
            case SHOW_MSG:
//              Toast.makeText(OfflineMapActivity_Old.this, (String) msg.obj,
//                      Toast.LENGTH_SHORT).show();
                ToastUtil.showShortToast(OfflineMapActivity_Old.this, (String)msg.obj);
                break;

            case DISMISS_INIT_DIALOG:
                initDialog.dismiss();
                handler.sendEmptyMessage(UPDATE_LIST);
                break;
            case SHOW_INIT_DIALOG:
                if (initDialog != null) {
                    initDialog.show();
                }

                break;

            default:
                break;
            }
        }

    };

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.offline_map_layout);

        init();
    }

    @Override
    protected void onResume() {
        super.onResume();

    }

    /**
     * 方法必须重写
     */
    @Override
    protected void onPause() {
        super.onPause();

    }

    /**
     * 方法必须重写
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }

    /**
     * 初始化如果已下载的城市多的话,会比较耗时
     */
    private void initDialog() {
        if (initDialog == null)
            initDialog = new ProgressDialog(this);
        initDialog.setMessage("正在获取离线城市列表");
        initDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        initDialog.setIndeterminate(false);
        initDialog.setCancelable(false);
        initDialog.show();
    }
    /**
     * 隐藏进度框
     */
    private void dissmissDialog() {
        if (initDialog != null) {
            initDialog.dismiss();
        }
    }

    /**
     * 初始化UI布局文件
     */
    private void init() {

        // 顶部
        mDownloadText = (TextView) findViewById(R.id.download_list_text);
        mDownloadedText = (TextView) findViewById(R.id.downloaded_list_text);

        mDownloadText.setOnClickListener(this);
        mDownloadedText.setOnClickListener(this);
        mBackImage = (ImageView) findViewById(R.id.back_image_view);
        mBackImage.setOnClickListener(this);

        // view pager 用到了所有城市list和已下载城市list所有放在最后初始化
        mContentViewPage = (ViewPager) findViewById(R.id.content_viewpage);


        //构造离线地图类
        amapManager = new OfflineMapManager(this, this);
        //离线地图初始化完成监听
        amapManager.setOnOfflineLoadedListener(this);
        initDialog();
    }
     private void initViewpage() {
         mPageAdapter = new OfflinePagerAdapter(mContentViewPage,
                    mAllOfflineMapList, mDownLoadedList);

            mContentViewPage.setAdapter(mPageAdapter);
            mContentViewPage.setCurrentItem(0);
            mContentViewPage.setOnPageChangeListener(this);
     }

    /**
     * 初始化所有城市列表
     */
    public void initAllCityList() {
        // 扩展列表
        View provinceContainer = LayoutInflater.from(OfflineMapActivity_Old.this)
                .inflate(R.layout.offline_province_listview, null);
        mAllOfflineMapList = (ExpandableListView) provinceContainer
                .findViewById(R.id.province_download_list);
        initProvinceListAndCityMap();
        // adapter = new OfflineListAdapter(provinceList, cityMap, amapManager,
        // OfflineMapActivity_Old.this);
        adapter = new OfflineListAdapter(provinceList, amapManager,
                OfflineMapActivity_Old.this);
        // 为列表绑定数据源
        mAllOfflineMapList.setAdapter(adapter);
        // adapter实现了扩展列表的展开与合并监听
        mAllOfflineMapList.setOnGroupCollapseListener(adapter);
        mAllOfflineMapList.setOnGroupExpandListener(adapter);
        mAllOfflineMapList.setGroupIndicator(null);
    }

    /**
     * sdk内部存放形式为<br>
     * 省份 - 各自子城市<br>
     * 北京-北京<br>
     * ...<br>
     * 澳门-澳门<br>
     * 概要图-概要图<br>
     * <br>
     * 修改一下存放结构:<br>
     * 概要图-概要图<br>
     * 直辖市-四个直辖市<br>
     * 港澳-澳门香港<br>
     * 省份-各自子城市<br>
     */
    private void initProvinceListAndCityMap() {

        List<OfflineMapProvince> lists = amapManager
                .getOfflineMapProvinceList();

        provinceList.add(null);
        provinceList.add(null);
        provinceList.add(null);
        // 添加3个null 以防后面添加出现 index out of bounds

        ArrayList<OfflineMapCity> cityList = new ArrayList<OfflineMapCity>();// 以市格式保存直辖市、港澳、全国概要图
        ArrayList<OfflineMapCity> gangaoList = new ArrayList<OfflineMapCity>();// 保存港澳城市
        ArrayList<OfflineMapCity> gaiyaotuList = new ArrayList<OfflineMapCity>();// 保存概要图

        for (int i = 0; i < lists.size(); i++) {
            OfflineMapProvince province = lists.get(i);
            if (province.getCityList().size() != 1) {
                // 普通省份
                provinceList.add(i + 3, province);
                // cityMap.put(i + 3, cities);
            } else {
                String name = province.getProvinceName();
                if (name.contains("香港")) {
                    gangaoList.addAll(province.getCityList());
                } else if (name.contains("澳门")) {
                    gangaoList.addAll(province.getCityList());
                } else if (name.contains("全国概要图")) {
                    gaiyaotuList.addAll(province.getCityList());
                } else {
                    // 直辖市
                    cityList.addAll(province.getCityList());
                }
            }
        }

        // 添加,概要图,直辖市,港口
        OfflineMapProvince gaiyaotu = new OfflineMapProvince();
        gaiyaotu.setProvinceName("概要图");
        gaiyaotu.setCityList(gaiyaotuList);
        provinceList.set(0, gaiyaotu);// 使用set替换掉刚开始的null

        OfflineMapProvince zhixiashi = new OfflineMapProvince();
        zhixiashi.setProvinceName("直辖市");
        zhixiashi.setCityList(cityList);
        provinceList.set(1, zhixiashi);

        OfflineMapProvince gaogao = new OfflineMapProvince();
        gaogao.setProvinceName("港澳");
        gaogao.setCityList(gangaoList);
        provinceList.set(2, gaogao);

        // cityMap.put(0, gaiyaotuList);// 在HashMap中第0位置添加全国概要图
        // cityMap.put(1, cityList);// 在HashMap中第1位置添加直辖市
        // cityMap.put(2, gangaoList);// 在HashMap中第2位置添加港澳

    }

    /**
     * 初始化已下载列表
     */
    public void initDownloadedList() {
        mDownLoadedList = (ListView) LayoutInflater.from(
                OfflineMapActivity_Old.this).inflate(
                R.layout.offline_downloaded_list, null);
        android.widget.AbsListView.LayoutParams params = new android.widget.AbsListView.LayoutParams(
                android.widget.AbsListView.LayoutParams.MATCH_PARENT,
                android.widget.AbsListView.LayoutParams.WRAP_CONTENT);
        mDownLoadedList.setLayoutParams(params);
        mDownloadedAdapter = new OfflineDownloadedAdapter(this, amapManager);
        mDownLoadedList.setAdapter(mDownloadedAdapter);
    }

    /**
     * 暂停所有下载和等待
     */
    private void stopAll() {
        if (amapManager != null) {
            amapManager.stop();
        }
    }

    /**
     * 继续下载所有暂停中
     */
    private void startAllInPause() {
        if (amapManager == null) {
            return;
        }
        for (OfflineMapCity mapCity : amapManager.getDownloadingCityList()) {
            if (mapCity.getState() == OfflineMapStatus.PAUSE) {
                try {
                    amapManager.downloadByCityName(mapCity.getCity());
                } catch (AMapException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 取消所有<br>
     * 即:删除下载列表中除了已完成的所有<br>
     * 会在OfflineMapDownloadListener.onRemove接口中回调是否取消(删除)成功
     */
    private void cancelAll() {
        if (amapManager == null) {
            return;
        }
        for (OfflineMapCity mapCity : amapManager.getDownloadingCityList()) {
            if (mapCity.getState() == OfflineMapStatus.PAUSE) {
                amapManager.remove(mapCity.getCity());
            }
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (amapManager != null) {
            amapManager.destroy();
        }

        if(initDialog != null) {
            initDialog.dismiss();
            initDialog.cancel();
        }
    }

    private void logList() {
        ArrayList<OfflineMapCity> list = amapManager.getDownloadingCityList();

        for (OfflineMapCity offlineMapCity : list) {
            Log.i("amap-city-loading: ", offlineMapCity.getCity() + ","
                    + offlineMapCity.getState());
        }

        ArrayList<OfflineMapCity> list1 = amapManager
                .getDownloadOfflineMapCityList();

        for (OfflineMapCity offlineMapCity : list1) {
            Log.i("amap-city-loaded: ", offlineMapCity.getCity() + ","
                    + offlineMapCity.getState());
        }
    }

    /**
     * 离线地图下载回调方法
     */
    @Override
    public void onDownload(int status, int completeCode, String downName) {

        switch (status) {
        case OfflineMapStatus.SUCCESS:
            // changeOfflineMapTitle(OfflineMapStatus.SUCCESS, downName);
            break;
        case OfflineMapStatus.LOADING:
            Log.d("amap-download", "download: " + completeCode + "%" + ","
                    + downName);
            // changeOfflineMapTitle(OfflineMapStatus.LOADING, downName);
            break;
        case OfflineMapStatus.UNZIP:
            Log.d("amap-unzip", "unzip: " + completeCode + "%" + "," + downName);
            // changeOfflineMapTitle(OfflineMapStatus.UNZIP);
            // changeOfflineMapTitle(OfflineMapStatus.UNZIP, downName);
            break;
        case OfflineMapStatus.WAITING:
            Log.d("amap-waiting", "WAITING: " + completeCode + "%" + ","
                    + downName);
            break;
        case OfflineMapStatus.PAUSE:
            Log.d("amap-pause", "pause: " + completeCode + "%" + "," + downName);
            break;
        case OfflineMapStatus.STOP:
            break;
        case OfflineMapStatus.ERROR:
            Log.e("amap-download", "download: " + " ERROR " + downName);
            break;
        case OfflineMapStatus.EXCEPTION_AMAP:
            Log.e("amap-download", "download: " + " EXCEPTION_AMAP " + downName);
            break;
        case OfflineMapStatus.EXCEPTION_NETWORK_LOADING:
            Log.e("amap-download", "download: " + " EXCEPTION_NETWORK_LOADING "
                    + downName);
            Toast.makeText(OfflineMapActivity_Old.this, "网络异常", Toast.LENGTH_SHORT)
                    .show();
            amapManager.pause();
            break;
        case OfflineMapStatus.EXCEPTION_SDCARD:
            Log.e("amap-download", "download: " + " EXCEPTION_SDCARD "
                    + downName);
            break;
        default:
            break;
        }

        // changeOfflineMapTitle(status, downName);
        handler.sendEmptyMessage(UPDATE_LIST);

    }

    @Override
    public void onCheckUpdate(boolean hasNew, String name) {
        // TODO Auto-generated method stub
        Log.i("amap-demo", "onCheckUpdate " + name + " : " + hasNew);
        Message message = new Message();
        message.what = SHOW_MSG;
        message.obj = "CheckUpdate " + name + " : " + hasNew;
        handler.sendMessage(message);
    }

    @Override
    public void onRemove(boolean success, String name, String describe) {
        // TODO Auto-generated method stub
        Log.i("amap-demo", "onRemove " + name + " : " + success + " , "
                + describe);
        handler.sendEmptyMessage(UPDATE_LIST);

        Message message = new Message();
        message.what = SHOW_MSG;
        message.obj = "onRemove " + name + " : " + success + " , " + describe;
        handler.sendMessage(message);

    }

    @Override
    public void onClick(View v) {
        if (v.equals(mDownloadText)) {
            int paddingHorizontal = mDownloadText.getPaddingLeft();
            int paddingVertical = mDownloadText.getPaddingTop();
            mContentViewPage.setCurrentItem(0);

            mDownloadText
                    .setBackgroundResource(R.drawable.offlinearrow_tab1_pressed);

            mDownloadedText
                    .setBackgroundResource(R.drawable.offlinearrow_tab2_normal);

            mDownloadedText.setPadding(paddingHorizontal, paddingVertical,
                    paddingHorizontal, paddingVertical);

            mDownloadText.setPadding(paddingHorizontal, paddingVertical,
                    paddingHorizontal, paddingVertical);

            mDownloadedAdapter.notifyDataChange();

        } else if (v.equals(mDownloadedText)) {
            int paddingHorizontal = mDownloadedText.getPaddingLeft();
            int paddingVertical = mDownloadedText.getPaddingTop();
//          mContentViewPage.setCurrentItem(1);

            mDownloadText
                    .setBackgroundResource(R.drawable.offlinearrow_tab1_normal);
            mDownloadedText
                    .setBackgroundResource(R.drawable.offlinearrow_tab2_pressed);
            mDownloadedText.setPadding(paddingHorizontal, paddingVertical,
                    paddingHorizontal, paddingVertical);
            mDownloadText.setPadding(paddingHorizontal, paddingVertical,
                    paddingHorizontal, paddingVertical);

            mDownloadedAdapter.notifyDataChange();

        } else if (v.equals(mBackImage)) {
            // 返回
            finish();
        }

    }

    @Override
    public void onPageScrollStateChanged(int arg0) {

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {

    }

    @Override
    public void onPageSelected(int arg0) {
        int paddingHorizontal = mDownloadedText.getPaddingLeft();
        int paddingVertical = mDownloadedText.getPaddingTop();

        switch (arg0) {
        case 0:
            mDownloadText
                    .setBackgroundResource(R.drawable.offlinearrow_tab1_pressed);
            mDownloadedText
                    .setBackgroundResource(R.drawable.offlinearrow_tab2_normal);
            // mPageAdapter.notifyDataSetChanged();
            break;
        case 1:
            mDownloadText
                    .setBackgroundResource(R.drawable.offlinearrow_tab1_normal);

            mDownloadedText
                    .setBackgroundResource(R.drawable.offlinearrow_tab2_pressed);
            // mDownloadedAdapter.notifyDataChange();
            break;
        }
        handler.sendEmptyMessage(UPDATE_LIST);
        mDownloadedText.setPadding(paddingHorizontal, paddingVertical,
                paddingHorizontal, paddingVertical);
        mDownloadText.setPadding(paddingHorizontal, paddingVertical,
                paddingHorizontal, paddingVertical);

    }
    @Override
    public void onVerifyComplete() {
        initAllCityList();
        initDownloadedList();
        initViewpage();
        dissmissDialog();
    }
}

感谢!!!

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条