我正在尝试使用来自服务器的更新数据更新我的地图,但我无法弄清楚如何从地图中删除旧项目(标记和群集 - 使用ClusterManager)( - 在我看来,我只能在ClusterManager中添加.
我有BroadcastReceiver,当有新数据时它会获得意图.我正在尝试这样的事情:(但它在"... getMarkers().clear();"上给了我UnsupportedOperationException .
private BroadcastReceiver myRefrestMapBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive");
mClusterManager.clearItems();
mClusterManager.getMarkerCollection().getMarkers().clear();
mClusterManager.getClusterMarkerCollection().getMarkers().clear();
mClusterManager.addItems(LocationGetter.getReports());
}
};
Run Code Online (Sandbox Code Playgroud)
我添加的数据仅用于此功能.
java.util.Collection<Marker> userCollection = mClusterManager.getMarkerCollection().getMarkers();
ArrayList<Marker> userList = new ArrayList<Marker>(userCollection);
// now is userList empty
for(Marker marker: userList){
marker.remove();
}
java.util.Collection<Marker> userCollection2 = mClusterManager.getClusterMarkerCollection().getMarkers();
ArrayList<Marker> userList2 = new ArrayList<Marker>(userCollection2);
// now is userList2 empty
for(Marker marker: userList2){
marker.remove(); …Run Code Online (Sandbox Code Playgroud) 是否有人可以解释我使用"with"功能?
签名
public inline fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()
Run Code Online (Sandbox Code Playgroud)
文件
以给定接收器作为接收器调用指定的函数f并返回其结果.
我发现它在这个项目中使用了Antonio Leiva.它用于移动视图:
fun View.animateTranslationY(translationY: Int, interpolator: Interpolator) {
with(ObjectAnimator.ofFloat(this, "translationY", translationY.toFloat())) {
setDuration(context.resources.getInteger(R.integer.config_mediumAnimTime).toLong())
setInterpolator(interpolator)
start()
}
}
Run Code Online (Sandbox Code Playgroud)
我在想,我知道将其转移到的意义
fun View.animateTranslationX(translationX: Int, interpolator: Interpolator) {
with(ObjectAnimator()) {
ofFloat(this, "translationX", translationX.toFloat())
setDuration(context.resources.getInteger(R.integer.config_mediumAnimTime).toLong())
setInterpolator(interpolator)
start()
}
}
Run Code Online (Sandbox Code Playgroud)
但它没有编译......但我认为这ObjectAnimaton是接收器,它会得到我将在{}括号中调用的所有内容.任何人都可以解释真正的意义并提供一个基本的例子 - 至少比这更基本吗?:d
我试图理解Android中Parcelable的原理,我编写这个简单的代码来查找当我尝试"包裹"自定义对象列表时发生的事情 - 它给出了我的NullPointerException
这是我的代码:
package cz.united121.android.testpupose.Objects.HelperObject;
import android.os.Parcel;
import android.os.Parcelable;
public class MyString implements Parcelable {
private static final String TAG = MyString.class.getName();
String mString;
public MyString(){
}
public MyString(String mString){
this.mString = mString;
}
public MyString(Parcel in){
mString = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mString);
}
public static final Parcelable.Creator<MyString> CREATOR
= new Parcelable.Creator<MyString>() {
public MyString createFromParcel(Parcel in) {
return new MyString(in);
}
public MyString[] …Run Code Online (Sandbox Code Playgroud) 关闭(并从设备上最近的应用程序中删除)我的应用程序后,我收到此错误,它每次都会发生。
09-22 23:44:28.503 4021-4021/? I/art? Late-enabling -Xcheck:jni
09-22 23:44:28.584 4021-4021/cz.united121.android.revizori D/cz.united121.android.revizori.App? onCreate
09-22 23:44:28.642 4021-4021/cz.united121.android.revizori D/cz.united121.android.revizori.service.MyUpdatingService? onCreate
09-22 23:44:28.677 4021-4021/cz.united121.android.revizori D/AndroidRuntime? Shutting down VM
09-22 23:44:28.679 4021-4021/cz.united121.android.revizori E/AndroidRuntime? FATAL EXCEPTION: main
Process: cz.united121.android.revizori, PID: 4021
java.lang.RuntimeException: Unable to start service cz.united121.android.revizori.service.MyUpdatingService@3a7bf84e with null: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getAction()' on a null object reference
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2913)
at android.app.ActivityThread.access$2100(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372) …Run Code Online (Sandbox Code Playgroud) 当我尝试乘以charAt时,我收到了"大号":
String s = "25999993654";
System.out.println(s.charAt(0)+s.charAt(1));
Run Code Online (Sandbox Code Playgroud)
结果:103
但是当我想只收到一个号码时,没关系.
在JAVA文档中:
the character at the specified index of this string. The first character is at index 0.
Run Code Online (Sandbox Code Playgroud)
所以我需要解释或解决方案(我认为我应该将字符串转换为int,但在我看来这是不必要的工作)
android ×4
java ×4
animation ×1
char ×1
google-maps ×1
kotlin ×1
parcelable ×1
service ×1
string ×1