обновление Activity, когда пользователей находится в самой Activity, которая нуждается в обновление

257
01 апреля 2018, 20:13

Добрый день, подскажите пожалуйста, у меня есть база в которую в фоновом режиме записываются входящие сообщения, из этой базы берутся данные и добавляются в listView. Вопрос заключается в следующем как можно реализовать обновление Activity при поступление нового сообщения, если пользователь находится в этой Activity?

public class acran1 extends AppCompatActivity {
    final static Logger log =Logger.getLogger(acran2.class.getName());
    private static final String TAG="myLogs";
    DBHelper dbHelper;
    ListView listView;
    public static HashMap<String, String> spisokKontaktov;
    public static HashMap<String, String> nameNomer;
    public String  massivArray [][];
    public int count;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.acran1);
        dbHelper = new DBHelper(this);
        getContacts();
        listView=(ListView)findViewById(R.id.listView);
        List<String> items=initData();
        ArrayAdapter<String> adapter=new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id)
            {
                count=count-1;
                String selectedItem = massivArray[count-position][1];
                Intent intent1=new Intent(getApplicationContext(), acran2_2.class);
                intent1.putExtra("name", massivArray[count-position][1]);
                intent1.putExtra("nomer", massivArray[count-position][0]);
                startActivity(intent1);
                // установка текста элемента TextView
//                selection.setText(selectedItem);
            }
        });

//
    }
    private List<String> initData() {
        List<String> list=new ArrayList<String>();
        // извлекаем данные с таблицы по абонентам смс
        SQLiteDatabase database = dbHelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        count=0;
        Cursor cursor = database.query(DBHelper.TABLE_NUMBER, new String[] {}, null, new String[] {}, null, null, null, null);
        if (cursor.moveToFirst()) {
            Log.i(TAG, "acran1 извлечение из базы списка");
            int idIndex = cursor.getColumnIndex(DBHelper.NUM_ID);
            int phoneIndex = cursor.getColumnIndex(DBHelper.NUM_PHONE);
            int keyIndex = cursor.getColumnIndex(DBHelper.NUM_NAME);
            do {
                Log.i(TAG, "ID = " + cursor.getInt(idIndex) +
                        ", phone = " + cursor.getString(phoneIndex) +
                        ", name = " + cursor.getString(keyIndex));
                count++;
            } while (cursor.moveToNext());
        } else
            Log.i(TAG,"0 rows");
        cursor.close();
        Log.i(TAG, "acran1 размер базы "+ count);
        this.massivArray=new String [count][2];
        int shit=0;
        Cursor qwerty = database.query(DBHelper.TABLE_NUMBER, new String[] {}, null, new String[] {}, null, null, null, null);
        if (qwerty.moveToFirst()) {
            int idIndex = qwerty.getColumnIndex(DBHelper.NUM_ID);
            int phoneIndex = qwerty.getColumnIndex(DBHelper.NUM_PHONE);
            int keyIndex = qwerty.getColumnIndex(DBHelper.NUM_NAME);
            do {
                Log.i(TAG, "ID = " + qwerty.getInt(idIndex) +
                        ", phone = " + qwerty.getString(phoneIndex) +
                        ", name = " + qwerty.getString(keyIndex));
                massivArray[shit][0]=qwerty.getString(phoneIndex);
                massivArray[shit][1]=qwerty.getString(keyIndex);
                shit++;
            } while (qwerty.moveToNext());
        } else
            Log.i(TAG,"0 rows");
         qwerty.close();
        for (int i=count; i>0; i--){
            list.add(massivArray[i-1][1]);
        }
        return list;
    }

    //    вытаскиваем список всех контактов из телефона парой номер-имя
    public void getContacts() {
        this.spisokKontaktov=new HashMap<String,String>();
        this.nameNomer=new HashMap<String,String>();
        String phoneNumber = null;
        String nameKontakt="";
        String numberKontakt="";
        //Связываемся с контактными данными и берем с них значения id контакта, имени контакта и его номера:
        Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI;
        String _ID = ContactsContract.Contacts._ID;
        String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME;
        String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER;
        Uri PhoneCONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID;
        String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
        ContentResolver contentResolver = getContentResolver();
        Cursor cursor = contentResolver.query(CONTENT_URI, null,null, null, null);
        //Запускаем цикл обработчик для каждого контакта:
        try {
            if (cursor.getCount() > 0) {
                //Если значение имени и номера контакта больше 0 (то есть они существуют) выбираем
                //их значения в приложение привязываем с соответствующие поля "Имя" и "Номер":
                while (cursor.moveToNext()) {
                    String contact_id = cursor.getString(cursor.getColumnIndex( _ID ));
                    String name = cursor.getString(cursor.getColumnIndex(DISPLAY_NAME));
                    int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(HAS_PHONE_NUMBER)));
                    //Получаем имя:
                    if (hasPhoneNumber > 0) {
                        nameKontakt=name;
                        Cursor phoneCursor = contentResolver.query(PhoneCONTENT_URI, null,
                                Phone_CONTACT_ID + " = ?", new String[] { contact_id }, null);
                        //и соответствующий ему номер:
                        while (phoneCursor.moveToNext()) {
                            phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER));
                            numberKontakt=phoneNumber;
                            this.spisokKontaktov.put(numberKontakt, nameKontakt);
                            this.nameNomer.put(nameKontakt, numberKontakt);
                            Log.i(TAG, "acran1 контакт с именем "+nameKontakt+numberKontakt);
                        }
                    }
                }
            }
            TestDatabase();
        } catch (NumberFormatException e) {
            Log.i(TAG, "acran1 ошибка при вытаскивании списка контактов из телефона acran1");
        }
    }


    // заполняем базу данных по умолчанию
    private void TestDatabase ()   {
        SQLiteDatabase database = dbHelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        for (String s:this.spisokKontaktov.keySet()){
            Cursor cur = database.query(DBHelper.TABLE_CONTACTS, new String[] {"_id", DBHelper.KEY_PHONE}, DBHelper.KEY_PHONE + " = ?", new String[] {s}, null, null, null);
            boolean k=cur.moveToFirst();
            try {
                if (k==false){
                    contentValues.put(DBHelper.KEY_PHONE, s);
                    contentValues.put(DBHelper.KEY_KLUCH, "3259DA");
                    database.insert(DBHelper.TABLE_CONTACTS, null ,contentValues);
                    Log.i(TAG, "acran1 запись с контактом успешно добавлена в БД "+ s);
                } else {
                    Log.i(TAG, "acran1 ИСКЛЮЧЕНИЕ при добавление контакта в БД");
                }
            } catch (Exception e) {
                Log.i(TAG, "acran1 ошибка  добавления записи"+ s);
            }
        }
    }
    public void button3 (View view){
        switch (view.getId()) {
            case(R.id.button):
                Intent intent=new Intent(this, acran2.class);
                startActivity(intent);
                break;
            default: break;
        }
    }
    @Override
    protected void onStop() {
        super.onStop();
    }
    @Override
    protected void onStart() {
        super.onStart();
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        Intent intent=new Intent(this, acran1.class);
        startActivity(intent);// Always call the superclass method first
        // Activity being restarted from stopped state
    }
    @Override
    protected void onResume() {
        super.onResume();
        listView=(ListView)findViewById(R.id.listView);
        List<String> items=initData();
        ArrayAdapter<String> adapter=new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id)
            {
                count=count-1;
                String selectedItem = massivArray[count-position][1];
                Intent intent1=new Intent(getApplicationContext(), acran2_2.class);
                intent1.putExtra("name", massivArray[count-position][1]);
                intent1.putExtra("nomer", massivArray[count-position][0]);
                startActivity(intent1);
                // установка текста элемента TextView
//                selection.setText(selectedItem);
            }
        });
    }
}
READ ALSO
Проблема с подключением сервлетов на Glassfish5

Проблема с подключением сервлетов на Glassfish5

Я новичок в Java, и вот недавно занялась изучением серверовНачала с Tomcat и с ним проблем не возникло, затем я перешла на Glassfish

211
Создание уведомлений на Андроид

Создание уведомлений на Андроид

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

182
Как лучше реализовать корзину на spring?

Как лучше реализовать корзину на spring?

Делаю интернет магазин и столкнулся с проблемой создания корзиныЕсть два варианта:

198