getclass().getsimplename()
时间: 2023-04-23 19:02:56 浏览: 71
getclass().getsimplename() 的意思是获取当前对象的类名,不包括包名。例如,如果当前对象的类名是 com.example.MyClass,那么 getsimplename() 方法返回的就是 MyClass。
相关问题
Activity tempActivity = App.getMultiRoundActivity(); if (tempActivity != null && tempActivity instanceof MapBaseActivity) { ((MapBaseActivity) tempActivity).searchPoiWithLocationCheck(pi); }这个调用方法是, public void searchPoiWithLocationCheck(PoiSearchInfo poiSearchInfo) { this.mPoiSearchInfo = poiSearchInfo; Log.i(getClass().getSimpleName(), "searchPoiWithLocationCheck: "); mHandler.post(() -> { if (location_last_success_time == 0 || (System.currentTimeMillis() - location_last_success_time) > LOCATION_MAX_USE_TIME) { Log.i(MapBaseActivity.this.getClass().getSimpleName(), "searchPoiWithLocationCheck , wait for location ready" + mLocClient); if (mToastLocating == null) { mToastLocating = Toast.makeText(MapBaseActivity.this, "正在定位,请稍后", Toast.LENGTH_LONG); } if (mLocClient == null) { Log.i(MapBaseActivity.this.getClass().getSimpleName(), "searchPoiWithLocationCheck : reInit location caused by null"); initLocation(); } else if (!mLocClient.isStarted()) { Log.i(MapBaseActivity.this.getClass().getSimpleName(), "searchPoiWithLocationCheck : restart location caused by stoped"); mLocClient.start(); } mIsPoiSearchNeeded = true; mToastLocating.show(); } else { searchPoi(poiSearchInfo); } }); 其中,会走else,也就是searchPoi(poiSearchInfo);方法, public void searchPoi(PoiSearchInfo poiSearchInfo) { Log.i(getClass().getSimpleName(), "searchPoi: " + poiSearchInfo ); mIsPoiSearchNeeded = false; // 配置请求参数 附近检索 if (poiSearchInfo.getSearchType() == Constant.MAP_SEARCH_CITY){ searchInCity(poiSearchInfo); } else { searchNearBy(poiSearchInfo); } } 帮我修改一下这个调用方法的时候,要区分是哪一个行动,也就是去修改去目的地还是添加途经点
根据您提供的代码,我看不出这个方法是用来修改目的地还是添加途经点的。不过,可以通过修改 `PoiSearchInfo` 对象的某些属性来区分是修改目的地还是添加途经点。具体来说,您可以添加一个 `boolean` 类型的属性来表示是否为目的地,然后在调用 `searchPoiWithLocationCheck` 方法时,根据这个属性来决定是调用修改目的地的方法还是添加途经点的方法。例如:
```
public void searchPoiWithLocationCheck(PoiSearchInfo poiSearchInfo) {
this.mPoiSearchInfo = poiSearchInfo;
Log.i(getClass().getSimpleName(), "searchPoiWithLocationCheck: ");
mHandler.post(() -> {
if (location_last_success_time == 0 || (System.currentTimeMillis() - location_last_success_time) > LOCATION_MAX_USE_TIME) {
Log.i(MapBaseActivity.this.getClass().getSimpleName(), "searchPoiWithLocationCheck , wait for location ready" + mLocClient);
if (mToastLocating == null) {
mToastLocating = Toast.makeText(MapBaseActivity.this, "正在定位,请稍后", Toast.LENGTH_LONG);
}
if (mLocClient == null) {
Log.i(MapBaseActivity.this.getClass().getSimpleName(), "searchPoiWithLocationCheck : reInit location caused by null");
initLocation();
} else if (!mLocClient.isStarted()) {
Log.i(MapBaseActivity.this.getClass().getSimpleName(), "searchPoiWithLocationCheck : restart location caused by stoped");
mLocClient.start();
}
mIsPoiSearchNeeded = true;
mToastLocating.show();
} else {
if (poiSearchInfo.isDestination()) {
modifyDestination(poiSearchInfo);
} else {
addWaypoint(poiSearchInfo);
}
}
});
}
```
其中,`PoiSearchInfo` 对象可以定义为如下所示:
```
public class PoiSearchInfo {
private boolean isDestination; // 是否为目的地
private int searchType; // 搜索类型
// 其他属性
// 构造方法
// Getter 和 Setter
}
```
这样,就可以通过 `isDestination` 属性来区分不同的行为。对应的修改目的地和添加途经点的方法可以根据实际需求自行编写。
protected void showPoiListView(boolean show) { Log.i(getClass().getSimpleName(), "showPoiListView: " + show ); mHandler.post(() -> { Log.e(MapBaseActivity.this.getClass().getSimpleName(), "run: " + show ); if (show) { mPoiListContainer.setVisibility(View.VISIBLE); } else { mPoiListContainer.setVisibility(View.GONE); //将所有Overlay 从地图上消除 if (poiOverlay != null) { poiOverlay.removeFromMap(); } } }); } 以上代码是在listview点击跳转到另一个Activity的时候调用,如 showPoiListView(false); 但是它会造成界面的右侧出现一个和listview宽高大小一样的黑屏,我把mHandler.post(() -> 这个给注释掉,黑屏就没了,这是什么情况?我解决的对吗?
这段代码中的 `mHandler.post(() -> {...})` 是用来将任务放入主线程的消息队列中,等待主线程空闲时执行。在你注释掉这个代码块后,`mPoiListContainer.setVisibility(View.VISIBLE)` 和 `mPoiListContainer.setVisibility(View.GONE)` 就直接在调用它的线程中执行了,而不是在主线程中执行。
由于 Android 中 UI 操作必须在主线程中执行,因此直接在非主线程中执行可能会导致一些问题,如你所遇到的黑屏问题。因此,正确的做法是使用 `runOnUiThread()` 方法或 `Handler` 将 UI 操作放到主线程中执行,而不是直接在非主线程中执行。
你可以尝试使用 `runOnUiThread()` 方法代替 `mHandler.post(() -> {...})`,如下所示:
```
protected void showPoiListView(boolean show) {
Log.i(getClass().getSimpleName(), "showPoiListView: " + show );
runOnUiThread(() -> {
Log.e(MapBaseActivity.this.getClass().getSimpleName(), "run: " + show );
if (show) {
mPoiListContainer.setVisibility(View.VISIBLE);
} else {
mPoiListContainer.setVisibility(View.GONE);
//将所有Overlay 从地图上消除
if (poiOverlay != null) {
poiOverlay.removeFromMap();
}
}
});
}
```
这样就可以避免直接在非主线程中执行 UI 操作导致的问题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)