Как скрыть другие результаты и просто показать первый результат в ListView после отсканированного QR-кода - PullRequest
0 голосов
/ 22 ноября 2018

Я разрабатываю приложение сканирования обновлений, которое сканирует 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();

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

В вашем адаптере ListView вы, вероятно, будете иметь List, ArrayList или любой объект, который увеличивается в размере, из которого ваш ListView отображает свои данные.

Что определяет, сколько данных в ArrayList или List дляrender это возвращаемое значение метода getCount().

Сделайте что-то вроде

package com.fz5.emminent17.adapters;

import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import java.util.ArrayList;
import java.util.Collections;

/**
 * Created by Francis Ilechukwu 20/11/2017.
 */

public class SearchResult Adapter extends BaseAdapter {

    private ArrayList<String> searchResults = new ArrayList<>();
    private boolean showOnlyFirst = false;

    public FacultyAdapter(String[] searchResults) {
        Collections.addAll(this.searchResults, searchResults);
    }

    public void setShouldShowFirstOnly(boolean showOnlyFirst) {
        this.showOnlyFirst = showOnlyFirst;
    }

    @Override
    public int getCount() {
        if (showOnlyFirst) {
            return 1;
        }
        return searchResults.size();
    }

    @Override
    public Object getItem(int i) {
        return searchResults.get(i);
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        // Your Normal getView implementation
    }
}

Обратите внимание на логическое значение showOnlyFirst, это управляющая переменная для использования в случае, если вы хотитепоказать все результаты позже или нажатием кнопки.

Однако, чтобы показывать только сначала, установите для него значение true.

0 голосов
/ 22 ноября 2018

если формат ваших результатов всегда постоянен, тогда вы можете положиться на этот код

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");
            String first_result = contents.substring( 0, contents.indexOf(","));

            scannedList.add(first_result);
            itemsAdapter.notifyDataSetChanged();
        }
     }
}

Леме, если возникают какие-либо проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...