мое андроид-приложение состоит из нескольких действий, одного сервиса (который связывается с удаленным сервером) и базы данных SQLite. У меня много проблем с отображением данных из таблицы базы данных пользователю.
Я много гуглил и попробовал и listView, и tableView.
Первый, после многих попыток, работает несколько.
Класс OffViaggListActivity выполняет привязку к уникальной службе в приложении (называемой Servizio), а затем, когда привязка завершена, вызывает метод Servizio (eseguiComandoLocale (...)), который выполняет запрос к базе данных SQLite и возвращает Курсор, используемый в listView.
ПЕРВАЯ ПРОБЛЕМА: теперь отображается только последнее поле таблицы.
Я хочу отобразить все девять полей и дать пользователю возможность включить некоторые функции (например, «удалить строку»), когда пользователь выберет одну из них.
ВТОРАЯ ПРОБЛЕМА: Если я закрываю действие и затем снова открываю его, список остается пустым, и если я закрываю действие снова, я получаю «IllegalArgumentException: Сервис не зарегистрирован».
Код:
1) ListActivity:
public class OffViaggListActivity extends ListActivity {
static Servizio mioServizio;
ServiceConnection myConn;
ListView lista;
Button chiudi;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.offerteviaggilist);
lista=(ListView) findViewById(android.R.id.list);
chiudi=(Button) findViewById(R.id.OffViaggChiudiButton);
chiudi.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
OffViaggListActivity.this.unbundService();
OffViaggListActivity.this.finish();
}
});
if(mioServizio==null){
myConn=new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
mioServizio=null;
Log.d("OffViaggListActivit", "Servizio disconnesso");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
Servizio.LocalBinder binder=(Servizio.LocalBinder)service;
mioServizio=binder.getService();
Log.d("OffViaggListActivit", "Servizio connesso");
String[] displayFields = new String[] {DBSQLite.OFFV_KEY_ROWID,
DBSQLite.OFFV_KEY_USER,DBSQLite.OFFV_KEY_PART,
DBSQLite.OFFV_KEY_DEST,DBSQLite.OFFV_KEY_DATA,
DBSQLite.OFFV_KEY_ORA,DBSQLite.OFFV_KEY_POSTI,
DBSQLite.OFFV_KEY_COSTO,DBSQLite.OFFV_KEY_DETTAGLI};
int[] displayViews = new int[] { android.R.id.text1,
android.R.id.text1,
android.R.id.text1,
android.R.id.text1,
android.R.id.text1,
android.R.id.text1,
android.R.id.text1,
android.R.id.text1,
android.R.id.text1
};
Cursor cur=mioServizio.eseguiComandoLocale
(OffViaggListActivity.this,"OffertePubblicate");
setListAdapter(new SimpleCursorAdapter
(OffViaggListActivity.this.getApplicationContext(),
android.R.layout.simple_list_item_1, cur,
displayFields, displayViews));
}
};
bindService(new Intent(OffViaggListActivity.this, Servizio.class),
myConn, Context.BIND_AUTO_CREATE);
}
}
public void unbundService(){
unbindService(myConn);
}
}
2) XML-формат:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="vertical">
<ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@id/android:list"></ListView>
<Button android:layout_height="wrap_content" android:id="@+id/OffViaggChiudiButton" android:text="@string/chiudi" android:layout_width="match_parent"></Button>
</LinearLayout>
Простите, если я допустил синтаксическую ошибку или ошибку форматирования.