M.S.S.E Ответов: 2

Проблема сохранения данных формы регстрации в базу данных sqlite (приложение немедленно закрыто)


Я очень новичок в разработке android, я делаю простое приложение, которое имеет регистрационную форму, но после заполнения полей данными и нажатия кнопки сохранения приложение сразу же закрывается. Я включил код, потому что не знаю, где неисправная часть:

public void AddNew(View v)
  {
      if(Image_path.isEmpty())
      {
          Toast.makeText(this,"please choose a profile picture",Toast.LENGTH_SHORT).show();
          return;
      }

      EditText ed_full_name = findViewById(R.id.full_name);
      EditText ed_mobie = findViewById(R.id.phone);
      EditText ed_id_num = findViewById(R.id.id_num);
      EditText ed_address = findViewById(R.id.address);
      EditText ed_section_id = findViewById(R.id.straction_id);
      EditText ed_card_id = findViewById(R.id.card_id);
      EditText ed_dis_id = findViewById(R.id.dis_id);
      String full_name = ed_full_name.getText().toString();
      String mobile = ed_mobie.getText().toString();
      String id_num = ed_id_num.getText().toString();
      String address = ed_address.getText().toString();
      String card_id = ed_card_id.getText().toString();
      String section_id = ed_section_id.getText().toString();
      String dis_id = ed_dis_id.getText().toString();
      if(full_name.isEmpty() || mobile.isEmpty() || id_num.isEmpty() || address.isEmpty() || card_id.isEmpty() || section_id.isEmpty())
      {
          Toast.makeText(this,"Please fill all fields",Toast.LENGTH_SHORT).show();
          return;
      }
      DBHelper mHelper = new DBHelper(this);
      SQLiteDatabase db = mHelper.getWritableDatabase();
      ContentValues values = new ContentValues();
      values.put("full_name", full_name);
      values.put("mobile", mobile);
      values.put("id_num", id_num);
      values.put("address", address);
       values.put("section_id", section_id);
      values.put("card_id", card_id);
      values.put("image_path", Image_path);
      values.put("dis_id", dis_id);
      db.insertWithOnConflict("Clients",
              null,
              values,
              SQLiteDatabase.CONFLICT_REPLACE);
      db.close();
      Toast.makeText(this, "Saved successfully! ", Toast.LENGTH_SHORT).show();
      finish();


Что я уже пробовал:

Я проверил код безрезультатно, как я уже упоминал, я действительно большой человек, чтобы выяснить, в чем проблема, я надеюсь, что вы поможете.

JudyL_MD

В дополнение к тому, что сказала Патрис ... отладчик в Android Studio довольно хорош. Кроме того, посмотрите в свой вывод LogCat; найдите и щелкните вкладку в нижней части Android Studio, которая говорит LogCat. Там должны быть записи, сообщающие, какое исключение было выброшено, что привело к сбою вашего приложения. Найдите строки красного цвета (цвет по умолчанию для вывода ошибок), и он покажет вам стек вызовов. Это даже позволит вам щелкнуть по строке и перейти прямо к тому месту в исходном коде, которое породило исключение.

2 Ответов

Рейтинг:
2

Richard MacCutchan

Посмотри на свой код. Последнее, что вы делаете в этом мире. AddNew метод заключается в вызове заканчивать()[^] что прекращает вашу деятельность. Последнее, что вы должны сделать в любом неосновном методе, это return туда, откуда тебя вызвали.


M.S.S.E

Я заменил его

finish
с
return
но возникла та же проблема.

Richard MacCutchan

Ладно, может быть, это и не проблема. Таким образом, вам нужно настроить отладчик для отслеживания кода, чтобы точно узнать, где он падает. Это может быть в коде, который обрабатывает кнопку сохранения, поэтому, пожалуйста, обновите вопрос и покажите нам этот код.

Рейтинг:
0

Patrice T

Цитата:
Я не знаю, где неисправная часть

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.


Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
[Обновление]
Цитата:
Интересно, вы называете это ответом или решением?. Мне также интересно, читаете ли Вы пост, теги или хотя бы название..
Я читал мемы о размещении кода на Codeproject в качестве новичка и о том, как некоторые люди едят его живьем!! Теперь я понимаю.

Я начал свой пост о том, что я очень Новичок, а это значит, что я сделал все возможное.
Я надеюсь, что получил полезный намек или помощь вместо обвинений или самобичевания..

На практике у нас нет возможности воспроизвести вашу проблему, поскольку она зависит от вашей конфигурации и, вероятно, от вашей базы данных.
Отладчик поможет вам определить положение сбоя и получить контекст. И если нет сбоя, он покажет вам, что именно делает ваш код.


M.S.S.E

Привет сэр,
Интересно, вы называете это ответом или решением?. Мне также интересно, читаете ли Вы пост, теги или хотя бы название..
Я читал мемы о размещении кода на Codeproject в качестве новичка и о том, как некоторые люди едят его живьем!! Теперь я понимаю.

Я начал свой пост о том, что я очень Новичок, а это значит, что я сделал все возможное.
Я надеюсь, что получил полезный намек или помощь вместо обвинений или самобичевания..

просто вспомните себя, когда вы напечатали " Привет, мир!".

Я надеюсь, что вы проигнорируете этот пост.
Спасибо.

David Crow

Смотрите мой неуместный комментарий ниже.

Patrice T

Привет Дэвид,
Спасибо за этот комментарий, но я думаю, что вы должны были использовать кнопку "ответить" поверх комментария, чтобы ОП был уведомлен.