Android SugarRecord пытается работать с несуществующей таблицей - PullRequest
0 голосов
/ 13 ноября 2018

Запустив мой код, я получаю эту ошибку.

android.database.sqlite.SQLiteException: нет такой таблицы: STORE (код 1): во время компиляции: INSERT ИЛИ ЗАМЕНА В STORE (TOTAL_TEXT ......

Я читал некоторые форумы и до сих пор не понимаю, почему система ищет эту таблицу STORE . В любой части кода нет ссылки на любую таблицу STORE , поскольку она не существует в моем Cloud FireBase. Моя таблица называется Магазины .

Одним из самых популярных решений является отключение Instant Run, но я не могу, потому что оно мне нужно для остальной части кода.

Собираюсь выкинуть Logcat, вижу, что проблема связана с SugarRecord.save(store); из FirebaseDatabaseHelper.java.

Мой код такой.

FirebaseDatabaseHelper.java

public static void getAllStores(final StoresSyncedListener storesSyncedListener)
    {
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        log("getAllStores");
        db.collection("Stores")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>()
                {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task)
                    {
                        log("task.toString " + task.toString());
                        log("task.isSuccessful " + task.isSuccessful());
                        if (task.isSuccessful())
                        {
                            log("task.getResult " + task.getResult().size());
                            for (QueryDocumentSnapshot document : task.getResult())
                            {
                                Store store = document.toObject(Store.class);
                                store.setStoreId(document.getId());
                                //save all stores to local Sugar database
                                SugarRecord.save(store);
                            }
                            log("task.SugarRecord.saveInTx B");

                            storesSyncedListener.onStoresSynced(true);
                        }
                        else
                        {
                            storesSyncedListener.onStoresSynced(false);
                            logError("Error getting documents: ", task.getException());
                        }
                    }
                });
    }

Store.java

public class Store extends SugarRecord
{
    @Unique
    private String storeId;
    private String address;
    private String city;
    private String country;
    private String mail;
    private String phone;
    private String postalCode;
    private String taxCode;
    private String name;
    private float totalXpoint;
    private String priceSeparator;
    private String totalText;
    private String dateFormat;
    private String currency;

    public Store()
    {
        super();
    }

    public String getOwner()
    {
        return owner;
    }

    public void setOwner(String owner)
    {
        this.owner = owner;
    }

    private String owner;


    public String getStoreId()
    {
        return storeId;
    }

    public void setStoreId(String storeId)
    {
        this.storeId = storeId;
    }

    public String getAddress()
    {
        return address;
    }

    public void setAddress(String address)
    {
        this.address = address;
    }

    public String getCity()
    {
        return city;
    }

    public void setCity(String city)
    {
        this.city = city;
    }

    public String getCountry()
    {
        return country;
    }

    public void setCountry(String country)
    {
        this.country = country;
    }

    public String getMail()
    {
        return mail;
    }

    public void setMail(String mail)
    {
        this.mail = mail;
    }

    public String getPhone()
    {
        return phone;
    }

    public void setPhone(String phone)
    {
        this.phone = phone;
    }

    public String getPostalCode()
    {
        return postalCode;
    }

    public void setPostalCode(String postalCode)
    {
        this.postalCode = postalCode;
    }

    public String getTaxCode()
    {
        return taxCode;
    }

    public void setTaxCode(String taxCode)
    {
        this.taxCode = taxCode;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public float getTotalXpoint()
    {
        return totalXpoint;
    }

    public void setTotalXpoint(float totalXpoint)
    {
        this.totalXpoint = totalXpoint;
    }

    public String getPriceSeparator()
    {
        return priceSeparator;
    }

    public void setPriceSeparator(String priceSeparator)
    {
        this.priceSeparator = priceSeparator;
    }

    public String getTotalText()
    {
        return totalText;
    }

    public void setTotalText(String totalText)
    {
        this.totalText = totalText;
    }

    public String getDateFormat()
    {
        return dateFormat;
    }

    public void setDateFormat(String dateFormat)
    {
        this.dateFormat = dateFormat;
    }

    public String getCurrency()
    {
        return currency;
    }

    public void setCurrency(String currency)
    {
        this.currency = currency;
    }

    @Override
    public String toString()
    {
        return "Stores{" +
                "storeId='" + storeId + '\'' +
                ", address='" + address + '\'' +
                ", city='" + city + '\'' +
                ", country='" + country + '\'' +
                ", mail='" + mail + '\'' +
                ", phone='" + phone + '\'' +
                ", postalCode='" + postalCode + '\'' +
                ", taxCode='" + taxCode + '\'' +
                ", name='" + name + '\'' +
                ", totalXpoint=" + totalXpoint +
                ", priceSeparator='" + priceSeparator + '\'' +
                ", totalText='" + totalText + '\'' +
                ", dateFormat='" + dateFormat + '\'' +
                ", currency='" + currency + '\'' +
                '}';
    }
}

Logcat

11-17 16:24:43.580 9133-9133/com.example.ves.gennaio3 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.ves.gennaio3, PID: 9133
    android.database.sqlite.SQLiteException: no such table: STORE (code 1): , while compiling: INSERT OR REPLACE  INTO STORE(TOTAL_TEXT,ADDRESS,MAIL,TOTAL_XPOINT,PHONE,CURRENCY,CITY,OWNER,DATE_FORMAT,ID,NAME,PRICE_SEPARATOR,POSTAL_CODE,TAX_CODE,STORE_ID,COUNTRY) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
        at com.orm.SugarRecord.save(SugarRecord.java:280)
        at com.orm.SugarRecord.save(SugarRecord.java:260)
        at com.example.ves.gennaio3.firebase.FirebaseDatabaseHelper$8.onComplete(FirebaseDatabaseHelper.java:198)
        at com.google.android.gms.tasks.zzj.run(Unknown Source)
        at android.os.Handler.handleCallback(Handler.java:746)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5443)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

1 Ответ

0 голосов
/ 22 ноября 2018

на самом деле не имеет значения, как вызывается удаленный узел в Firebase ... вы должны переименовать локальную таблицу Stores в STORE - как ожидается в соответствии с соглашениями об именовании ORM.проверили документацию , но аннотации для имен таблиц сопоставления отсутствуют - так, как они существуют для Room .но, глядя на исходный код , можно увидеть аннотацию @ Table , которая, возможно, позволила бы сопоставление:

@table(name = "Stores")
public class Store extends SugarRecord<Store> {

}
...