Я использую Firebase в качестве backend для своего приложения. Но я не могу сериализовать PolylineOptions от Firebase до типа PolylineOptions. Если я попытаюсь преобразовать его обратно с dataSnapshot.getValue (PolylineOptions.class);, я следующее сообщение об ошибке:Firebase Serialize PolylineOptions
com.firebase.client.FirebaseException: Failed to bounce to type
....
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
Unrecognized field "width" (class com.google.android.gms.maps.model.PolylineOptions), not marked as ignorable (one known property: "points"])
....
at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555)
Как я могу исправить эту проблему?
Вот код, который демонстрирует проблему:
import android.location.Location;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import com.firebase.client.Query;
import com.google.android.gms.maps.model.PolylineOptions;
import com.google.android.gms.maps.model.LatLng;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;
public class MainActivity extends AppCompatActivity{
PolylineOptions mPolylineOptions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPolylineOptions = new PolylineOptions();
Location targetLocation = new Location("name");
targetLocation.setLatitude(1.0d);
targetLocation.setLongitude(2.0d);
mPolylineOptions.add(new LatLng(targetLocation.getLatitude(), targetLocation.getLongitude()));
mPolylineOptions.color(ContextCompat.getColor(this, R.color.colorPrimary));
Firebase.setAndroidContext(this);
Firebase ref = new Firebase("https://xxxxxxx");
Firebase testRef = ref.child("test");
final Query queryRef = testRef.orderByKey();
queryRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("Test", "data change");
PolylineOptions activity1 = dataSnapshot.getValue(PolylineOptions.class);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
testRef.setValue(mPolylineOptions);
}
}
Вот является JSON из Firebase:
Вот в JSON из Firebase:
{
"test" : {
"clickable" : false,
"color" : -12627531,
"geodesic" : false,
"points" : [ {
"latitude" : 50.68468468468468,
"longitude" : 8.190167190445726
} ],
"visible" : true,
"width" : 10.0,
"zindex" : 0.0
}
}
Как говорится в сообщении об ошибке: ваш объект Java имеет поле, в то время как ваш JSON имеет «точки». Здесь мы больше ничего не можем сказать, не видя более полезной информации. Добавьте фрагмент вашего JSON в виде текста (без скриншота), который вы можете легко получить с помощью кнопки «Экспорт» в панели мониторинга Firebase. Затем также добавьте код, который вы используете для чтения этого JSON из базы данных. См. [MCVE] (http://stackoverflow.com/help/mcve). –
Выложите пример с полным кодом в верхний пост. Также я опубликовал форму JSON Firebase ... –
Обратите внимание, что M в MCVE означает ** минимальный **. Я сомневаюсь, что сама обработка местоположений имеет отношение к исключению. Поэтому, если вы удалите это из вопроса (при сохранении кода и воспроизведении проблемы), вы избавляете нас от понимания того, что он делает. Чем проще вы сделаете это для нас, чтобы помочь вам, тем более вероятно, что кто-то поможет. –