2017-02-01 10 views
0

SQLiteデータベース(既存のdbファイル)からデータを取得するリストビューを作成します。 ListViewは、私を困惑させる側面の1つであるカスタム行を使用します。データを抽出し、それをカスタム行のTextViewに割り当てるにはどうしたらいいですか?Xamarin Android C#:SQLiteデータベースのデータを使用してListViewカスタム行にデータを挿入

私はXamarinを初めて使いました。本当にありがとうございます。ありがとうございました!

現在のダイアログボックスのエラー時に実行:

Java.Lang.ClassNotFoundException: Didn't find class  "md5c4f65b5cf99ab8e97737acf0f8ec7efd.DBHelper" on path: DexPathList[[zip file "/data/app/AppName.Droid-1/base.apk"],nativeLibraryDirectories=[/data/app/AppName.Droid-1/lib/arm, /system/fake-libs, /data/app/AppName.Droid-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]] 

'MainActivity':

public class EateriesActivity : Activity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     Title = "Find An Eatery"; 
     SetContentView(Resource.Layout.Eateries); 


     DBHelper db = new DBHelper(); 
     db.CreateDatabase(); 
     db.CreateTable(); 

     var items = db.GetData(); 
     var listView = FindViewById<ListView>(Resource.Id.EateryList_ListView); 

     listView.Adapter = new ArrayAdapter<string>(this, Resource.Layout.Eatery_ListView_Row, items); 
    } 
} 

ListViewAdapter(これは必要なのか?):

class ListViewAdapter : BaseAdapter<Eatery> 
{ 
    private List<Eatery> myItems; 
    private Context myContext; 
    public ListViewAdapter(Context context, List<Eatery> items) 
    { 
     myItems = items; 
     myContext = context; 
    } 
    public override int Count 
    { 
     get { return myItems.Count; } 
    } 

    public override long GetItemId(int position) 
    { 
     return position; 
    } 

    public override Eatery this[int position] 
    { 
     get 
     { 
      return myItems[position]; 
     } 
    } 

    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     View row = convertView; 

     if (row == null) 
     { 
      row = LayoutInflater.From(myContext).Inflate(Resource.Layout.Eatery_ListView_Row, null, false); 
     } 

     TextView placeName = row.FindViewById<TextView>(Resource.Id.placeName); 
     placeName.Text = myItems[position].Name; 

     TextView placeTown = row.FindViewById<TextView>(Resource.Id.placeTown); 
     placeTown.Text = myItems[position].Town; 

     return row; 
    } 
} 

イータリー:

public class Eatery 
{ 
    [PrimaryKey] 
    public string ID { get; set; } 
    public string Image { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string Address1 { get; set; } 
    public string Town { get; set; } 
    public string PostCode { get; set; } 
    public string Cuisine { get; set; } 
} 

DBHelper:

public class DBHelper 
{ 
    private static string DB_PATH = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
    private static string DB_NAME = "EateryDB.db"; 

    public void CreateDatabase() 
    { 
     string dbPath = Path.Combine(DB_PATH, DB_NAME); 
     var db = new SQLiteConnection(new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid(), dbPath); 
    } 

    public void CreateTable() 
    { 
     string dbPath = Path.Combine(DB_PATH, DB_NAME); 
     var db = new SQLiteConnection(new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid(), dbPath); 
     db.CreateTable<Eatery>(); 
    } 

    public List<string> GetData() 
    { 
     string dbPath = Path.Combine(DB_PATH, DB_NAME); 
     var db = new SQLiteConnection(new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid(), dbPath); 
     List<string> data = new List<string>(); 
     foreach (var item in db.Table<Eatery>()) 
     { 
      var place = item.Name.ToString(); item.Town.ToString(); 

      data.Add(place); 
     } 
     return data; 
    } 
+0

求めている:あなたが行ったようにあなたのハードコードをするとき

List<Eatery> data = new List<Eatery>(); foreach (var item in db.Table<Eatery>()) { var place = item.Name.ToString(); var location = item.Location.ToString(); var rating = item.Rating; item.Town.ToString(); data.Add(new Eatery() { PlaceName = place, PlaceLocation = location, PlaceRating = rating }); } 

そして最後に、あなたのアダプタにこのデータを追加SQliteデータベースからデータを取得しますか? –

+0

@ GraceFeng-MSFTこんにちは。実際には、私はそれ以上の方法で、カスタムListView行のTextViewに取得したデータを割り当てる方法に問題があります。あなたはその明らかなことを本当にあなたの助けに感謝してくれれば上記の私の問題に可能な解決策を投稿できますか?私はポストのコードを更新しました。ありがとう。 –

答えて

0

コードのあなたの2つのバージョンに基づいて、私はあなたがmyItemsにデータベースからのデータを追加して必要なものだと思います。

その後、あなたは、このようなサンプルコードのためにすることができます:あなたが実際に接続する方法

MyListViewAdapter adapter = new MyListViewAdapter(this, data); 
+0

こんにちは、お返事ありがとうございます。 DBHelperのaddData()メソッドにコードの最初のセクションを追加し、次にEateryActivityへのListViewAdapterクラスの参照を追加しました。他に何かありますか?私は私のポストの上に述べたのと同じエラーを受けます。 –

+0

@ E.Coder、あなたのエラーはあなたの 'DBHelper'クラスが見つからないことを示唆しています、それはヌルです、あなたは正しく初期化しましたか? –

+0

私は主な活動でこれを開始しました...これまでのやり方は正しいか、DBに接続する別の方法を提案しますか? –

関連する問題