我有一个带有 EditText 和(瞬时 2 个按钮)的活动。当按下按钮时,会检查来自 EditText 的数据是否为空或空字符串。如果是这样,应该显示一个 AlertDialog。这应该重复,直到 TextEdit 的结果不为空。只要我在 Activity 中没有任何进一步的处理,它就可以正常工作。如果我有进一步的指令,则不会显示 Alertdialog。逐步调试显示应用程序进入检查,创建警报对话框但未显示,而是执行代码中的下一条指令。所以没有意义。申请必须在显示警报对话框的位置停止处理。收到非空字符串后,应根据带有各种 SQL 注入字符串的文本文件对其进行检查,并引发一个显示测试进度的 Progressdialog。如果测试是肯定的,则应返回 EditText 以允许更正数据。到目前为止,所有按钮的行为都是相同的。所以我相信这将是为这些动作创建一个自己的(内部)类的最佳方式。进一步的操作(尚未实现)应该是:一个按钮将调用另一个活动,要求手动完成数据,其他按钮将尝试从各种互联网资源中获取丢失的数据。并在另一个活动中显示结果,以便选择正确的数据。然后将完整的数据发送到数据库。
这是代码:
public class BlahverwaltungDateneingabeActivity extends Activity {
public String vtitel=null; //Variable, der der Wert des Texteingabefeldes zugewiesen werden soll
public String vtitel_1 = null; //Variable für Stringmanipulation
private EditText input_vtitel; //Texteingabefeld
public static Boolean inject_2=false;
final Context context_1=this;
Toast einToast;
// private String filename=getString(R.string.Tempfile_fuer_Blahdaten); // Temporäres File für Blahdaten
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_blahverwaltung_dateneingabe_1);
Button manuellButton = (Button) findViewById(R.id.manuell_button);
Button ofdbButton = (Button) findViewById(R.id.blah_button);
//OnClicklistener erzeugen
manuellButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
input_vtitel = (EditText) findViewById(R.id.Blahtitel); //Texteingabefeld initialisieren
vtitel = input_vtitel.getText().toString(); //Texteingabe String zuweisen
if (vtitel.equals(null) || vtitel.equals("")) {
AlertDialog.Builder adb_1 = new AlertDialog.Builder(context_1); //Alertdialog wenn Texteingabe leer
adb_1.setTitle(R.string.Nullstring); //Alertdialgo Titel setzen
adb_1.setMessage(R.string.Nullstring_1); //AlertNachricht setzen
adb_1.setCancelable(false); //kann nicht durch Back abgebrochen werden
adb_1.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { //OnClickListener erzeugen
public void onClick(DialogInterface dialog, int which) { //Activity neu starten
dialog.dismiss();
if (Build.VERSION.SDK_INT >= 11) { //Methode zum Neustart in Abhängigkeit vom SDK wählen
recreate();
} else {
Intent in_1 = getIntent();
overridePendingTransition(0, 0);
in_1.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(in_1);
}
}
});
AlertDialog ad_1 = adb_1.create(); //Alertdialig erzeugen
ad_1.show();
//Alertdialog anzeigen
}
InjectionDialog id_1= new InjectionDialog(BlahverwaltungDateneingabeActivity.this);
id_1.execute(vtitel);
try {
inject_2=id_1.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
// vtitel_1 = vtitel.replace(" ", "+"); //Leerzeichen durch "+" ersetzen
/*
try {
outputstream_1 = openFileOutput(filename, Context.MODE_PRIVATE);
outputstream_1.write(vtitel.getBytes());
outputstream_1.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
*/
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.blahverwaltung_dateneingabe, menu);
return true;
}
}
如果您提供帮助,请尽可能解释,我是 Java/Android 新手,有时并不完全理解我在做什么。学习书籍和互联网资源通常没有帮助。我能够采用提供的解决方案,但我也想了解为什么这样做以及代码在做什么。
BTW:正如我上面提到的数据可能会发送到互联网,那么如何确保发送时数据中没有html hacking,cross site scripting java script,php攻击代码?a还有一些我可以检查数据字符串的常用字符串吗?