Я разрабатываю приложение сканирования обновлений, которое сканирует QR-код и обновляет его до базы данных.
Вот мой код для обновления базы данных.
private void updateDB() throws ClassNotFoundException, SQLException {
int OKcnt = 0;
int NotOKcnt = 0;
String shows = "";
Class.forName("org.postgresql.Driver");
Connection conn = null;
try {
conn = DriverManager.getConnection(
sp.getString("URL","jdbc:postgresql://localhost:5432/Test"),
sp.getString("User","Test"), sp.getString("Pass","Test")
);
for (String scanned : scannedList) {
String[] splits = scanned.split(",");
String show = "Show Table";
String table = "BedRegistration";
String set = "DocStatus";
String set2 = "IP";
String where = "Name";
String where2 = scanned;
show = splits[0].equals("") ? table :splits [0];
table = splits[1].equals("") ? table : splits[1];
where = splits[2].equals("") ? where : splits[2];
where2 = splits[3].equals("") ? where2 : splits[3];
show = show + ". ";
shows = shows + show ;
String SQL = "UPDATE " + table + " SET ";
String SQLWhere = " WHERE " + where + "='" + where2 + "'";
for (int i = 4; i < splits.length; i=i+2) {
set = splits[i].equals("") ? set : splits[i];
set2 = splits[i+1].equals("") ? set2 : splits[i+1];
SQL += set + " = '" + set2 + "', ";
}
SQL = SQL.substring(0, SQL.length() - 2);
SQL = SQL + SQLWhere;
Statement pstmt = conn.createStatement();
try {
int i = pstmt.executeUpdate(SQL);
System.out.println(SQL+"DB result = "+i);
OKcnt++;
} catch (SQLException e){
NotOKcnt++;
continue;
}
}
А вот мой скан QRКодовый код.
public void scanBar(View v) {
try {
Intent intent = new Intent(ACTION_SCAN);
intent.putExtra("SCAN_FORMATS", "CODE_39,CODE_93,CODE_128,DATA_MATRIX,ITF,CODABAR,EAN_13,EAN_8,UPC_A,QR_CODE");
intent.putExtra("SAVE_HISTORY", false);
startActivityForResult(intent, 0);
} catch (ActivityNotFoundException anfe) {
showDialog(this, "No BarScanner Found", "Download a scanner code activity?", "Yes", "No").show();
}
}
Как я могу скрыть другие результаты и просто показать первый результат, который является String Show.
Потому что я пробовал кому-то коды из многих источников, включая stackoverflow, пытался сделать 2listview, так что 1 listview для хранения всех данных и скрытия их, а также другой просмотр списка для сохранения и отображения только первого результата, но он не работает.
Я искал две недели, прежде чем решил задать вопрос в stackoverflow.
Так что я действительно запутался прямо сейчас.Я надеюсь, что кто-то может помочь мне.Заранее спасибо:)
PS: Извините за мой английский.
Вот мой список и код адаптера.
public static final String DB_CONNECTOR = "DB_Connector" ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(org.starprise.mobile.R.layout.activity_main);
Toolbar myToolbar = (Toolbar) findViewById(org.starprise.mobile.R.id.my_toolbar);
setSupportActionBar(myToolbar);
ActionBar ab = getSupportActionBar();
// Enable the Up button
ab.setDisplayHomeAsUpEnabled(true);
// We get the ListView component from the layout
ListView lv = (ListView) findViewById(R.id.ListView);
itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, scannedList);
lv.setAdapter(itemsAdapter);
Вот кнопка, которую я нажал, чтобы обновить базу данных.
public void updateDB(View v) {
asyncDBHandling as = new asyncDBHandling(this);
as.execute(sp,scannedList);
//new asyncDBHandling().execute(sp,scannedList);
}
Вот код для обработки после сканирования QR-кода.
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
scannedList.add(contents);
itemsAdapter.notifyDataSetChanged();