在导入高德离线地图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();
}
}
感谢!!!