ORM SQlite не работает

165
05 ноября 2018, 13:00

В основном потоке

public void onClick(View v) {
    String name = etName.getText().toString();
    String mail = etEmail.getText().toString();

    switch (v.getId()) {
        case R.id.btnAdd:
            Contact contact = new Contact(mail, name);
            contact.save();
            break;
        case R.id.btnRead:
            List<Contact> allContacts = Contact.listAll(Contact.class);
            textView.setText(allContacts.toString());
            break;
        case R.id.btnClear:
            Contact.deleteAll(Contact.class);
            break;
    }

И отдельный класс

  import com.orm.SugarRecord;
public class Contact extends SugarRecord{
    String name;
    String mail;
    public Contact() {
    }
    public Contact(String mail, String name) {
        this.mail = mail;
        this.name = name;
    }
    @Override
    public String toString() {
        return "Contact{" +
                "name='" + name + '\'' +
                ", mail='" + mail + '\'' +
                '}';
    }
}

В AndroidManifest

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    android:name="com.orm.SugarApp"> <!--Используйте этот атрибут дословно-->
    <meta-data android:name="DATABASE" android:value="sugar_example.db"/>
    <meta-data android:name="VERSION" android:value="1"/>
    <meta-data android:name="QUERY_LOG" android:value="true"/>
    <meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.example.viktor.anabstract"/>

Запускаю приложение, ввожу данные, жму добавить и приложение вылетает

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.viktor.anabstract, PID: 12949
                  java.lang.NullPointerException: SugarContext has not been initialized properly. Call SugarContext.init(Context) in your Application.onCreate() method and SugarContext.terminate() in your Application.onTerminate() method.
                      at com.orm.SugarContext.getSugarContext(SugarContext.java:22)
                      at com.orm.SugarRecord.getSugarDataBase(SugarRecord.java:35)
                      at com.orm.SugarRecord.save(SugarRecord.java:416)
                      at com.example.viktor.anabstract.TestActivity.onClick(TestActivity.java:79)
                      at android.view.View.performClick(View.java:5246)
                      at android.widget.TextView.performClick(TextView.java:10620)
                      at android.view.View$PerformClick.run(View.java:21256)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:145)
                      at android.app.ActivityThread.main(ActivityThread.java:7007)
                      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:1404)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Answer 1

Мне всё ясно c этим кодом. Это пример не сколько на программирование, сколько на повторное использование кода. Вот моя рекомендация вам:

  1. Пусть вы нашли код где-то и он не компилится. Вполне возможно, что код выложили не полностью. Используйте advegoplagiatus, чтобы найти аналогичные куски в сети.
  2. В вашем примере, на сайте указан гитхаб разработчика com.github.satyan. Я нашёл этого американца идийского происхождения. Увы, в его репозитории не оказалось этого кода. Можно долго полемизировать, почему он убрал код, но тем не менее. Кода нет. А значит отвечать по-существу нечего. Из вашего куска:

    java.lang.NullPointerException: SugarContext has not been initialized properly.

Это по сути означает, что должен быть класс SugarContext. Его нет. Далее по коду,

Contact.listAll(Contact.class);

В классе Contact - мы не нашли этого статического метода. Его там нет. Значит по определению будет ошибка компиляции. Итого, вижу два решения:

  1. Вы пишете этому индусу с просьбой прислать вам полную версию кода.
  2. Вы ищете другой пример.
READ ALSO
Bluetooth low energy в Chrome extension под Windows

Bluetooth low energy в Chrome extension под Windows

Необходимо реализовать общение из расширения для Chrome с устройством по Bluetooth Low EnergyПроблема заключается в том, что Web Bluetooth API не работает в Chrome...

172
Зачем нужны параметры в функциях в javascript?

Зачем нужны параметры в функциях в javascript?

Не понимаю зачем нужны параметры в функциях в js Вот есть два примера первый с параметрами а второй нет

181
Регулярное выражение превод строки

Регулярное выражение превод строки

Подскажите, подскажите пожалуйста, модифицировать данное регулярное выражение: при нажатии клавиши Enter идёт переход на новую строку, и в вызалит...

304