私は自分のコードの中でいくつかの脆弱性をテストしていましたが、ユーザーに入力が無効なときに例外を投げて修正しようとしました。今私がtry-catchを実装し、私の電話でアプリケーションを実行すると、その無効な入力を入れるとクラッシュします。Androidスタジオ:try-catch例外がクラッシュするアプリケーション
私のコードは、addDataメソッドから例外をキャッチしないと仮定します。例外を実装する別の方法がありますか、またはaddDataメソッドから例外をキャッチする方法を教えてください。
package com.odisee.photoboothapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.EditText;
import android.widget.Toast;
import com.odisee.photoboothapp.fontchanger.FontChangeTextView;
public class Form_Database extends AppCompatActivity {
DatabaseHelper myDb;
int selectedId;
RadioGroup test;
RadioButton editEducation;
EditText editName, editSurname, editEmail;
Button btnAddData;
@Override
protected void onCreate(Bundle savedInstanceState) throws IllegalArgumentException {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_form__database);
myDb = new DatabaseHelper(this);
test = (RadioGroup)findViewById(R.id.radioButtonChoice);
editName = (EditText)findViewById(R.id.edit_Name);
editSurname = (EditText)findViewById(R.id.edit_Surname);
editEmail = (EditText)findViewById(R.id.edit_Email);
btnAddData = (Button)findViewById(R.id.btnSend);
try {
addData();
}
catch(IllegalArgumentException e) {
Toast.makeText(Form_Database.this,"Data not inserted" + e.getMessage(),Toast.LENGTH_LONG).show();
}
}
public void addData() {
btnAddData.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if(editName.getText().toString().contains("DROP")) {
throw new IllegalArgumentException("SQL Exceptie!");
}
else {
selectedId = test.getCheckedRadioButtonId();
editEducation = (RadioButton)findViewById(selectedId);
boolean isInserted = myDb.insertData(editName.getText().toString(), editSurname.getText().toString(), editEmail.getText().toString(), editEducation.getText().toString());
sendEmail();
if(isInserted == true) {
Toast.makeText(Form_Database.this,"Data inserted",Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(Form_Database.this,"Data not inserted",Toast.LENGTH_LONG).show();
}
}
}
}
);
}
public void sendEmail() {
//Getting content for email
String email = editEmail.getText().toString();
String subject = "testberichtje voor lorenzo";
String message = "testberichtje voor lorenzo";
//Creating SendMail object
SendMail sm = new SendMail(this, email, subject, message);
//Executing sendmail to send email
sm.execute();
}
}
05-01 17:58:17.021 30232から30232/com.odisee.photoboothapp E/AndroidRuntime:致命的な例外:メイン プロセス:com.odisee.photoboothapp、PID:30232 れるjava.lang .IllegalArgumentException:SQL Exceptie! android.widget.TextView.performClickでandroid.view.View.performClickでcom.odisee.photoboothapp.Form_Database $ 1.onClick(Form_Database.java:55) (View.java:5697) (TextView.java:10826で ) android.view.View $ PerformClick.run(View.java:22526) (android.os.Handler.handleCallback(Handler.java:739)) (android.os.Handler.dispatchMessage(Handler.java:95))にあります。 ) android.os.Looper.loop(Looper.java:158) とandroid.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(ネイティブメソッド)com.android.internal.os.ZygoteInit.mainでcom.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230) (ZygoteInit.java:1120)
どのようなエラーでクラッシュしますか?構文エラーでない限り、try/catch自体はクラッシュしません。 – Carcigenicate
@Carcigenicate私のアプリケーションのgradleファイルは完全に構築されています。アプリは例外を入れる前に完全に実行されました。だからそれ以外の何かになることはできません。フォームの入力行の中に文字列 "DROP"を入れて、 "SEND"ボタンをクリックします。それはちょうどクラッシュし、 "Nameappが停止した"と言います。 – Lorenzo
スタックトレースをアップロードできますか?基本的に何が間違っているのかは分かりません。 –