Firebase कोई गुण नहीं वर्गीकृत करने के लिए वर्ग पर पाया


86

मैं एक Firebase डेटाबेस बनाने के लिए तैयार हूँ।

मैं एक क्लास मॉडल करने की कोशिश कर रहा हूं। एक बहुत ही सरल वर्ग:

package com.glups.model;

import com.google.firebase.database.IgnoreExtraProperties;

@IgnoreExtraProperties
public class AlumnoFB {

    private String nombre;
    private String apellidos;
    private String telefono;
    private String email;
    private Boolean tieneWhatsapp;
    private Boolean tieneTelegram;
    private Boolean tieneHangouts;
    private Long formaPago;
    private Double ratioHora;
    private Double precioHora;
    private Double horasCompensadas;

    public AlumnoFB() {
        // Default constructor required for calls to DataSnapshot.getValue(User.class)
    }

    public AlumnoFB(String nombre,
                    String apellidos,
                    String telefono,
                    String email,
                    Boolean tieneWhatsapp,
                    Boolean tieneTelegram,
                    Boolean tieneHangouts,
                    Long formaPago,
                    Double ratioHora,
                    Double precioHora,
                    Double horasCompensadas) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.telefono = telefono;
        this.email = email;
        this.tieneWhatsapp = tieneWhatsapp;
        this.tieneTelegram = tieneTelegram;
        this.tieneHangouts = tieneHangouts;
        this.formaPago = formaPago;
        this.ratioHora = ratioHora;
        this.precioHora = precioHora;
        this.horasCompensadas = horasCompensadas;
    }
}

यह लगभग Firebase से एक नमूना वर्ग की तरह है।

GetUser () से प्राप्त एप्लिकेशन उपयोगकर्ता को Firebase पर लॉग इन किया गया है।

जब मैं सेटवैल्यू कहता हूं:

AlumnoFB alumno = new AlumnoFB("", "", "", "", false, false, false, ((Integer)FormaPago.INT_NO_PAGADO).longValue(), 0.0, 0.0, 0.0);
    mDatabase.child("AlumnoFB").child(ControlClasesFirebase.getUser().getUid()).setValue(alumno) ;

एक घातक अपवाद उठता है।

06-10 10:17:37.179 13841-13841/com.glups.controlclases E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.glups.controlclases, PID: 13841 com.google.firebase.database.DatabaseException: No properties to serialize found on class com.glups.model.AlumnoFB
at com.google.android.gms.internal.zzaix$zza.<init>(Unknown Source)
at com.google.android.gms.internal.zzaix.zzj(Unknown Source)
at com.google.android.gms.internal.zzaix.zzaw(Unknown Source)
at com.google.android.gms.internal.zzaix.zzav(Unknown Source)
at com.google.firebase.database.DatabaseReference.zza(Unknown Source)
at com.google.firebase.database.DatabaseReference.setValue(Unknown Source)
at com.glups.controlclases.MainActivity$4.onClick(MainActivity.java:305)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5258)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

मैंने प्रकार जांचे हैं, और सभी स्वीकार किए जाते हैं। क्या गलत है?

जवाबों:


165

Firebase को आपके Pojo को सार्वजनिक चर या गेटटर / सेटर की आवश्यकता होती है

परिवर्तनशील घोषणाओं को सार्वजनिक करें

public String nombre;
public String apellidos;
public String telefono;
public String email;
public Boolean tieneWhatsapp;
public Boolean tieneTelegram;
public Boolean tieneHangouts;
public Long formaPago;
public Double ratioHora;
public Double precioHora;
public Double horasCompensadas;

1
यह तर्कसंगत प्रतीत होता है। मैंने अभी तक गेटर्स / सेटर को परिभाषित नहीं किया है और मैं आमतौर पर अपने POJO चर को निजी रूप से परिभाषित करता हूं। यह काम करता है। धन्यवाद!
यूलरवेन

13
यहां तक ​​कि डॉक्टर के उदाहरणों में मैंने पाया कि फायरब्रिज डेटाबेस के लिए 'फ्रेंडलीमेसेज' की तरह निजी चर का इस्तेमाल किया गया था। मैंने पाया कि उन्होंने मेरे डिबग एपीके पर काम किया है लेकिन रिलीज एपीके नहीं। सार्वजनिक करने के लिए सब कुछ बदलना (और मुख्य एप्लिकेशन के बाहर वर्ग की घोषणा करना) ने इसे तय किया। हमेशा Android के साथ कम नुकसान।
Androidcoder

1
यह उन्हें सार्वजनिक रूप से उपयोग करने के लिए समझ में आता है। योग्य मुझे यह नहीं भूलना चाहिए कि
भारत

सब कुछ सार्वजनिक होने के बाद भी मुझे मुख्य एप्लिकेशन के बाहर अपनी ही फाइल में डेटा क्लास रखने की आवश्यकता नहीं थी क्योंकि दूसरी टिप्पणी के अनुसार
मसूद इलास

धन्यवाद ... इससे मेरी समस्या हल हो गई। लेकिन मैं कुछ जानना चाहता हूं। पहले तो वेरिएबल को पैकेज प्राइवेट घोषित किया गया था, लेकिन इससे कोई समस्या नहीं थी। लेकिन जब मैंने एपीके बनाया और भौतिक डिवाइस पर स्थापित किया तो मुझे उस समस्या का सामना करना पड़ा। क्यों ?
सुदिप्ता बसक

97

यदि आप प्रोगार्ड का उपयोग कर रहे हैं, तो आपके कॉन्फ़िगरेशन के आधार पर मॉडल में कुछ तरीके निकाले जा सकते हैं। जैसा कि हम जानते हैं कि पीओजेओ के लिए कोई बहुत अधिक अनुकूलन नहीं है क्योंकि इसमें गेटर्स और / या (वैकल्पिक रूप से) बसने वाले क्षेत्र हैं, आप एनोटेशन "@ कीप" का उपयोग कर सकते हैं, इसलिए प्रोगार्ड इस वर्ग से किसी भी तरीके को नहीं हटाएगा।

अधिक जानकारी के लिए इसे देखें : https://developer.android.com/studio/build/shrink-code.html

@Keep
public class Store {}

1
आप जीवन रक्षक भाई हैं। यह वास्तव में एपीके साइन किए जाने के बाद काम करता है।
स्मेट

इसने अंततः फायरबस डेटाबेस के साथ काम करने वाले ऐप के 'रिलीज़' संस्करण को बनाने के लिए मेरे 2 दिन के क्रम और संघर्ष को हल किया। डिबग ठीक काम कर रहा था, लेकिन रिलीज नहीं हुई थी। यह मुझे संकेत देने का संकेत देना चाहिए था, लेकिन किसी तरह मैं ऐसा करने में विफल रहा। उत्तर पोस्ट करने के लिए बहुत बहुत धन्यवाद!
वाहिब उल हक

जब मैंने इसे proguard- rules.pro फ़ाइल में लिखा, तो मुझे यह त्रुटि मिली:ProguardTokenType.CRLF, ProguardTokenType.FLAG_NAME , ProguardTokenType.LINE_CMT or ProguardTokenType.WS expected, got '@'
श्रुति

यह जांचने के लिए कि क्या आपके रक्षक नियम काम कर रहे हैं या नहीं, निर्माण / आउटपुट / मैपिंग / रिलीज़ / बीजों में आउटपुट की जांच करें। निर्माण और आउटपुट / मैपिंग / रिलीज़ / उपयोग। उपयोग करें। अधिक जानकारी यहाँ developer.android.com/studio/build /shrink-code.html
निंजा ४२०

27

मेरे मामले में मैं मॉडल कक्षाएं रखने के लिए एक गार्ड नियम जोड़ना भूल गया:

-keep class com.google.firebase.example.fireeats.model.** { *; }

यह @ aselims के उत्तर के समान है, बस संस्करण की रक्षा करें।

मैंने इसे आधिकारिक फायरस्टार उदाहरण में पाया:

https://github.com/firebase/quickstart-android/blob/master/firestore/app/proguard-rules.pro


मैं एक ही मुद्दा मिल रहा था के बाद मैं बनाने के साथ APK Proguard।
हिमांशु शेखर झा

3

मुझे आज यह मुद्दा मिल गया है और बस निजी चर के लिए गेट्टर / सेटर प्रदान करने का समाधान है।

उदाहरण के लिए:

private String pid;

public String getPid() {
    return pid;
}

public void setPid(String pid) {
    this.pid = pid;
}

अब यह बिना किसी त्रुटि के पूरी तरह से काम करता है। आशा है कि यह newbies देवों की मदद करेगा।



0

यदि कोई इसमें भाग लेता है और ऊपर दिए गए समाधानों में से कोई भी काम नहीं करता है, तो घोषित किए गए चर भी Objectकच्चे प्रकार के होने चाहिए।

उदाहरण के लिए, आप का उपयोग कर सकते हैं , Integerलेकिन आप का उपयोग नहीं कर सकते हैंint

उसी के लिए सच है boolean, float, double, मूल रूप से आदि, किसी भी अनबॉक्स्ड प्रकार।


0

जोड़ने

@ServerTimeStamp
public Date date; 

इस मुद्दे को हल करने में मेरी मदद की


0

आप दोनों में से कोई भी काम कर सकते हैं -

  1. अपने चरों को सार्वजनिक करें या
  2. सभी वैरिएबल के लिए गेटर्स और सेटर जोड़ें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.