私の Android アプリケーションは、複数のアクティビティ、1 つのサービス (リモート サーバーと通信する)、および SQLite データベースによって形成されます。データベースのテーブルからユーザーにデータを表示するには、多くの問題があります。
私はたくさんのグーグルを作り、listViewとtableViewの両方を試しました。最初のものは、多くの試行の後、いくつか機能します。クラス OffViaggListActivity は、アプリケーション内の固有のサービス (Servizio と呼ばれる) にバインドし、バインドが完了すると、Servizio のメソッド (eseguiComandoLocale(...)) を呼び出します。このメソッドは、SQLite データベースに対してクエリを実行し、 listView で使用されるカーソル。
最初の問題: テーブルの最後のフィールドのみが表示されるようになりました。9 つのフィールドすべてを表示し、ユーザーがいずれかを選択したときに、ユーザーがいくつかの機能 (「行の削除」など) を有効にできるようにしたいと考えています。
2 番目の問題: アクティビティを閉じてから再度開くと、リストが空のままになり、アクティビティを再度閉じると、「IllegalArgumentException: サービスが登録されていません」というメッセージが表示されます。
コード:
1) リストアクティビティ:
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>
構文やフォーマットのエラーがあった場合はご容赦ください。