Изменение ListView TextView Strings / Text перед загрузкой списка - PullRequest
0 голосов
/ 02 июля 2018

Не знаю, как задать вопрос или, возможно, название тоже неверно. Я пытался найти ответ везде, но не получил. Помогите . Я получаю данные из базы данных SQLite в ListView , который содержит четыре TextView s.

final String[] from = new String[] { DatabaseHelper._ID, DatabaseHelper.TITLE, DatabaseHelper.USERNAME, DatabaseHelper.PASSWORD };
final int[] to = new int[] { R.id.id, R.id.dataTitle, R.id.dataUsername, R.id.dataPassword };

DBManager dbManager = new DBManager(this);
dbManager.open();

Cursor cursor = dbManager.fetch();

ListView dataList = findViewById(R.id.dataList);
dataList.setEmptyView(findViewById(R.id.emptyData));

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contents, cursor, from, to, 0);
adapter.notifyDataSetChanged();
dataList.setAdapter(adapter);

Где fetch () :

public Cursor fetch() {
            String[] columns = new String[] {
                    DatabaseHelper._ID,
                    DatabaseHelper.TITLE,
                    DatabaseHelper.USERNAME ,
                    DatabaseHelper.PASSWORD
            };
    Cursor cursor = database.query(DatabaseHelper.TABLE_NAME, columns, null, null, null, null, null);
    if (cursor != null) {
        cursor.moveToFirst();
    }
    return cursor;
}

Теперь проблема в том, что я сохранил данные String в базе данных в зашифрованном формате . Я хочу расшифровать строк перед отображением в ListView. Пожалуйста, помогите мне . Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Если я правильно понял вашу точку зрения, вы можете добавить зашифрованные данные в ArrayList, затем зашифровать в списке массивов и затем добавить в просмотр списка

0 голосов
/ 02 июля 2018

Вы должны использовать AysncTask для извлечения данных из базы данных, потому что если данные больше, то пользовательский интерфейс может не отвечать на запросы и зависать и дешифровать строку в методе fetch ().

Вы должны загрузить просмотр списка в методе onPostExecute ()

Пример:

private class GetData extends AsyncTask<Void, Void, Void> {
    ArrayList<YourModel> youArray=null;

    @Override
    protected Void doInBackground(Void... voids) {
        youArray=dbManager.fetch() // Return decrypted array from fetch method.
        return null;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Void result) {
      // Load your listview here...
       SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contents, cursor, from, to, 0);
       dataList.setAdapter(adapter);
       adapter.notifyDataSetChanged();
    }
}

Ваш адаптер ListView

public class LazyAdapter extends BaseAdapter {

private Context context=null;
 ArrayList<YourModel> data=new ArrayList<>;
private static LayoutInflater inflater=null;

public LazyAdapter(Context context, ArrayList<YourModel> data) {
    this.context = a;
    this.data=data;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public int getCount() {
    return data.size();
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.your_view, null);

    // Your subviews which needed to be initialized and set.
    TextView email = (TextView)vi.findViewById(R.id.email); // email
    TextView password = (TextView)vi.findViewById(R.id.password); // password



    User user = data.get(position);

    // Setting all values in listview
    email.setText(user.getEmail());
    password.setText(user.getPassword());

    return vi;
}}
...