Я хочу извлечь данные из адаптера Array и сохранить его в базе данных , как если бы информация о сканированном bluetooth хранилась в массиве, и я хочу получить эти данные и сохранить их в своей базе данных. . любая помощь будет apreciatedКак извлечь данные из ArrayAdapter
ответ
вы можете добавить в свой класс адаптера он будет возвращать все элементы адаптера в списке, вы можете делать все, что вы хотите с ним EDIT:
public class MainActivity extends Activity {
MyAdapter<String> btArrayAdapter; //don't foget to change type here
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
btArrayAdapter = new MyAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1);
listDevicesFound.setAdapter(btArrayAdapter);
...
}
public class MyAdapter<String> extends ArrayAdapter<String> {
public MyAdapter(Context context, int resource) {
super(context, resource);
}
//Adapter implementation
//so this is the function that retieve data from the adapter
public List<String> getAllItems() {
ArrayList<String> result = new ArrayList<>()
for (int i = 0; i < getCount(); i++) {
result.add(getItem(i));
}
return result;
}
}
}
вы можете затем извлекать данные по телефону btArrayAdapter.getAllItems();
для кнопки на XML:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:onClick="btnClick"
android:text="save "/>
для базы данных вы можете добавить:
public class MainActivity extends Activity {
//constant used for database
private static final String DEVICE = "Device";
private static final String BLUETOOTH_DEVICES = "BluetoothDevice";
private static final String DATE = "date";
SQLiteDatabase myDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//how to create or open databse
myDatabase = openOrCreateDatabase("DATABASE",MODE_PRIVATE,null);
// here we create a table like following
// BluetoothDevice :
// | Device : VARCHAR |
// | date : INTEGER |
myDatabase.execSQL("CREATE TABLE IF NOT EXISTS " + BLUETOOTH_DEVICES + "(" + DEVICE + " VARCHAR," + DATE + " INTEGER);");
}
private Map<String, Date> getItemFromDatabase() {
Map<String,Date> result = new HashMap<>();
//Query to retrieve data from database
Cursor c = myDatabase.rawQuery("Select * from " + BLUETOOTH_DEVICES, null);
//how to iterate hover database cursor
while (c.moveToNext()){
result.put(c.getString(c.getColumnIndex(DEVICE)),new Date(c.getInt(c.getColumnIndex(DATE))));
}
c.close();
return result;
}
public void store(List<String> data){
for (String value : data) {
//Query to insert item in databse
myDatabase.rawQuery("INSERT INTO "+BLUETOOTH_DEVICES+" VALUES(?,?);",new String[]{value, String.valueOf(new Date().getTime())});
}
}
//button click listenner defined in xml
public void btnClick(View view) {
// here we store all adapter item in database
store(btArrayAdapter.getAllItems());
}
}
Вы можете добавить его к предыдущему коду. Это просто база я высокоочищенного sugest вам переформатировать вы закодировать создать diffrent класс Java, использовать SQL помощника данных класс и прочее
проверьте мой код и, пожалуйста, скажите мне, где его тоже добавить –
Мне нужна кнопка, когда пользователь нажимает эту кнопку, все данные, такие как данные счетчика и данные адаптера, будут храниться в базе данных вместе с датой и временем ...любая помощь, пожалуйста, –
Я добавил создание кнопки и прослушиватель для нажатия кнопки и ОЧЕНЬ ПРОСТОГО создания базы данных, это база данных, но она должна работать. надеюсь, что это помогает –
FATAL EXCEPTION: main
Process: com.example.test.test, PID: 17458
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:3989)
at android.view.View.performClick(View.java:4741)
at android.view.View$PerformClick.run(View.java:19384)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5679)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at android.view.View$1.onClick(View.java:3984)
at android.view.View.performClick(View.java:4741)
at android.view.View$PerformClick.run(View.java:19384)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5679)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: near "s": syntax error (code 1): , while compiling: INSERT INTO BluetoothDevice VALUES('Faiz's iPhone
28:ED:6A:E0:E4:C8','1470825437206');
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1113)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:690)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1793)
Я отредактировал свой ответ, чтобы включить его в ваш код –
, если вы просто скопируйте прошлое, это не сработает, вам нужно разобраться и приспособиться к вашему коду ... извините, я не могу помочь вам больше того, что ... –
его хорошо спасибо soo much –
Ok, как вы просили я создал acticity с 2 списка, на первом мы имеем список элементов. Под кнопкой «Сохранить», когда вы нажимаете на нее, есть кнопка с надписью «Сохранить», она получит весь элемент адаптера и сохранит их в базе данных. Внизу обновляется кнопка, которая будет извлекать базу данных данных drom и отображать их во втором списке.
так для XML мы имеем: activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:layout_width="match_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:id="@+id/list" />
<Button
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/button"
android:onClick="btnSaveClick"
android:text="Save" />
<ListView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:id="@+id/dbList" />
<Button
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/refresh"
android:onClick="btnRefreshClick"
android:text="refresh" />
</LinearLayout>
Тогда есть 3 классов Java, один для определения устройств Bluetooth объекта один для адаптера и один для деятельности. первая BluetoothDevice.java:
public class BluetoothDevice {
public String name;
public String address;
public Date date;
public String scan;
public BluetoothDevice(String name, String address, Date date,String scan) {
this.name = name;
this.address = address;
this.date = date;
this.scan =scan;
}
private SimpleDateFormat format = new SimpleDateFormat("dd MMMM yyyy");
public String getDateFormatted() {
if (date == null){
return " no date ";
}
return format.format(date);
}
}
Второй MyAdapter.java:
public class MyAdapter extends ArrayAdapter<BluetoothDevice> {
public MyAdapter(Context context, int resource, List<BluetoothDevice> devices) {
super(context, resource, devices);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// here we can define custom design of list item
TextView textView = new TextView(getContext());
BluetoothDevice item = getItem(position);
textView.setTextColor(Color.BLACK);
textView.setText(item.name+" : "+item.address +" date :"+item.getDateFormatted()+" "+item.scan);
return textView;
}
//method to get all adapter objects
public List<BluetoothDevice> getAllItem() {
List<BluetoothDevice> result = new ArrayList<>();
for (int i = 0; i < getCount(); i++) {
Log.e("fef", "getAllItem: ");
result.add(getItem(i));
}
return result;
}
}
и, наконец MyActivity.java
public class MainActivity extends Activity {
SQLiteDatabase myDatabase;
private MyAdapter adapter;
private ListView listOfDatabaseObject;
private ListView list;
private String databaseName = "DATABASENAME2";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView) findViewById(R.id.list);
listOfDatabaseObject = (ListView) findViewById(R.id.dbList);
List<BluetoothDevice> devices = new ArrayList<>();
//for the exemple i crate a new device to add to the list
devices.add(new BluetoothDevice("device 1", "14:5E:FE:AA", null,"scan record : 78984f9s8d4f98 s4df98s4f 984sf 984sd9f8 4cucoucou 7f578sfd57f8"));
adapter = new MyAdapter(getApplicationContext(), 0, devices);
list.setAdapter(adapter);
myDatabase = openOrCreateDatabase(databaseName, MODE_PRIVATE, null);
// here we create a table like following
// BluetoothDevice :
// | Device : VARCHAR |
// | Address : VARCHAR |
// | date : VARCHAR |
// | Scan : VARCHAR |
myDatabase.execSQL("CREATE TABLE IF NOT EXISTS BluetoothDevice (Device VARCHAR , Address VARCHAR , Date VARCHAR ,Scan VARCHAR);");
}
private List<BluetoothDevice> getItemFromDatabase() {
List<BluetoothDevice> result = new ArrayList<>();
// query database elements
Cursor c = myDatabase.rawQuery("Select * from BluetoothDevice ;", null);
while (c.moveToNext()) {
Date v = new Date();
v.setTime(c.getInt(c.getColumnIndex("Date")) * 1000);
Date date = new Date();
date.setTime(Long.valueOf(c.getString(c.getColumnIndex("Date"))));
result.add(
new BluetoothDevice(
c.getString(c.getColumnIndex("Device")),
c.getString(c.getColumnIndex("Address")),
date,
c.getString(c.getColumnIndex("Scan"))
)
);
}
c.close();
return result;
}
public void store(List<BluetoothDevice> data) {
for (BluetoothDevice value : data) {
String s = String.valueOf(new Date().getTime());
//insert in database
myDatabase.execSQL("INSERT INTO BluetoothDevice VALUES(?,?,?,?);", new String[]{value.name, value.address, s,value.scan});
}
}
// save button click listener
public void btnSaveClick(View view) {
store(adapter.getAllItem());
}
// refresh button click listener
public void btnRefreshClick(View view) {
List<BluetoothDevice> itemFromDatabase = getItemFromDatabase();
MyAdapter adapter = new MyAdapter(getApplicationContext(), 0, itemFromDatabase);
listOfDatabaseObject.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
в этом коде вы найдете все, что нужно, чтобы получить все элемент из адаптера, создайте кнопку и ее действие, создайте простую базу данных sqlite с настраиваемым полем, вставить элемент из базы данных, получить из базы данных объект и окончательно отобразить их внутри списка.
Myadapter
, когда я нажимаю save, бросая ошибку, я отправил ошибку logcat –
STOOOOP этот код является автономным кодом, это не имеет никакого отношения к вашему коду, не пытайтесь включить часть этого код внутри вашего. это всего лишь демонстрация того, как реализовать такие вещи, как кнопка и нажмите кнопку прослушивания, вам нужно адаптировать ее для своего кода. –
- 1. Как извлечь данные из массива?
- 2. Как извлечь данные из ImmutableMultiDict
- 3. Как извлечь данные из файла
- 4. Как извлечь данные из сценария?
- 5. Как извлечь данные из файла?
- 6. Как извлечь данные из XML?
- 7. Как извлечь данные из preg_replace
- 8. Как извлечь данные из списка?
- 9. Как извлечь данные из HTML
- 10. Как извлечь данные из NSMutableArray
- 11. Как извлечь данные из gdb
- 12. Как извлечь данные из XML
- 13. Как извлечь данные из PDF?
- 14. Как извлечь данные из MySQL?
- 15. Как извлечь данные из ссылки
- 16. Как извлечь данные из DataTable?
- 17. Как извлечь данные из mongodb?
- 18. Как извлечь данные из SipleXMLElement?
- 19. Как извлечь данные из RasterBrick?
- 20. Как извлечь данные из JSON
- 21. Как извлечь данные из XML, а затем извлечь данные
- 22. Как извлечь данные из инициализированного класса pojo?
- 23. Извлечь данные из plist
- 24. Извлечь данные из sql
- 25. Извлечь данные из ListView
- 26. Извлечь данные из объекта
- 27. Извлечь данные из потоков
- 28. Извлечь данные из Chatfuel
- 29. Извлечь данные из сигнала
- 30. Извлечь данные из MongoDBList
см. 'Адаптер # getItem' – pskink
может убрать его надлежащим образом? –
что разработать? он получает элемент из данной позиции: '" "" Получить элемент данных, связанный с указанной позицией в наборе данных. "" " – pskink