2016-09-30 1 views
1

Neu zu Xamarin und C#, aber ich versuche, eine wirklich einfache App für meine Klasse, die eine Datenbank für eine Zutat durchsucht und die Ernährungsinformationen zurückgibt. Meine Gruppe kennt Python, also haben sie den Code geschrieben und ich versuche, eine App so einfach wie nur möglich zu machen, aber ich habe Probleme. Wir nahmen die USDA-Datenbank als Download von ihrer Website und er Daten in der Datei ist inXamarin/Visual Studio 2015 - Sollte ich sqlite und Abfrageprobleme verwenden,

„NDB_No, Shrt_Desc, Energ_Kcal, Protein_g, Lipid_Tot_g, Ash_g, Carbohydrt_g, Fiber_TD_g, Sugar_Tot_g, Calcium_mg, Iron_mg, Magnesium_mg, Phosphorus_mg, Potassium_mg, Sodium_mg, Zinc_mg, Copper_mg, Manganese_mg, Selenium_ug, Vit_C_mg, Thiamin_mg, Riboflavin_mg, Niacin_mg, Panto_Acid_mg, Vit_B6_mg, Folate_Tot_ug, Folic_Acid_ug, Food_Folate_ug, Folate_DFE_ug, Choline_Tot_ mg, Vit_B12_ug, Vit_A_IU, Vit_A_RAE, Retinol_ug, Alpha_Carot_ug, Beta_Carot_ug, Beta_Crypt_ug, Lycopene_ug , Lut + Zea_ug, Vit_E_mg, Vit_D_ug, Vit_D_IU, Vit_K_ug, FA_Sat_g, FA_Mono_g, FA_Poly_g, Cholestr_mg, Gm_unit, num, Einheit "

Format mit mehreren hundert Zutaten. Wie

"1145, BUTTER, 717,0,85,81,11,0,09,0,06,0,0,06,24,0,02,2,24,24,11,0,09,0,016,0,004,1,0,0,005,0,034 0,042,0,11,0,003,3,0,3,3,18,8,0,17,2499,684,671,0,158,0,0,0,2,32,0,0,7,50,489,23,43,3,01,215,5,1 , tbsp "

Sie verwendeten sqlite3, um eine Tabelle zu erstellen und sie in Python abzufragen, indem sie einfach c.fetchrow verwenden, um eine Datenzeile zurückzugeben, und ein Array, um es aufzuteilen. Dieser Code kann hier gefunden werden: https://github.com/pjomara/SoftwareEngineeringIIProject/blob/master/nutr_data_grabber.py

Ich kann keine guten Beispiele finden und muss keine Datenbank erstellen, lesen Sie einfach von dem, den ich habe. Ich bin fest und jede Hilfe, Beispielcode oder so wäre großartig. Dank

Der aktuelle Fehler ist " Fehler CS1503 Argument 1: Aus 'SQLite.TableQuery' nicht konvertieren 'int' nutr_grabber C: \ Benutzer \ Steve \ Dokumente Visual Studio 2015 \ Projects \ \ nutr_grabber \ nutr_grabber \ MainActivity. 53 cs Aktiv“

namespace nutr_grabber 
{ 
    [Activity(Label = "nutr_grabber", MainLauncher = true, Icon = "@drawable/icon")] 
public class MainActivity : Activity 
{ 
    string str1; 

    private static string DB_PATH = "/data/data/nutr_grabber/databases/"; 

    private static string DB_NAME = "UsdDataProto.db"; 

    private void copyDataBase() 
    { 
     var dbInput = ApplicationContext.Assets.Open(DB_NAME); 
     string dbProto = DB_PATH + DB_NAME; 
     var myOutput = new FileStream(dbProto, FileMode.OpenOrCreate); 

     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = dbInput.Read(buffer, 0, 1024)) > 0) 
      myOutput.Write(buffer, 0, length); 
     myOutput.Flush(); 
     myOutput.Close(); 
     dbInput.Close(); 
    } 


    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 

     SetContentView(Resource.Layout.Main); 


     //set widgets 
     TextView message = FindViewById<TextView>(Resource.Id.message); 
     EditText ingred = FindViewById<EditText>(Resource.Id.enterHere); 
     Button search = FindViewById<Button>(Resource.Id.search); 

     string proto = DB_PATH + DB_NAME; 
     //string folder = System.Environment.GetFolderPath(); 
     var db = new SQLiteConnection(System.IO.Path.Combine(proto , "UsdDataProto.db")); 
     db.CreateTable<usdProto>(); 



     search.Click += (object sender, EventArgs e) => 
     { 
      str1 = ingred.Text; 



      var Item = db.Query<usdProto>("SELECT Energ_Kcal FROM usdProto WHERE Shrt_Desc = ?", str1); 



       new AlertDialog.Builder(this) 
       .SetMessage(Item) 
       .Show(); 


     }; 



    } 
} 



public class usdProto 
{ 
    [PrimaryKey] 

    public int NDB_No { get; set; } 
    public string Shrt_Desc { get; set; } 
    public int Energ_Kcal { get; set; } 
    public int Protein_g { get; set; } 
    public int Lipid_Tot_g { get; set; } 
    public int Ash_g { get; set; } 
    public int Carbohydrt_g { get; set; } 
+0

Es gibt viele, viele Beispiele, Walkthroughs usw. zur Verwendung von sqlite mit Xamarin. Ich würde versuchen, sie zu lesen und dann, wenn Sie eine bestimmte Frage oder Probleme haben, danach fragen. Zum Beispiel https://developer.xamarin.com/guides/cross-platform/application_fundamentals/data/part_5_using_data_in_an_app/#Using_a_pre-populated_SQLite_database_file – Jason

+0

Ich habe so lange gesucht und die eine Sache, die ich nicht gefunden habe, wäre nützlich gewesen. Ich habe es tatsächlich in der Lage, eine Zeile nur aus dem Öffnen der Datei mit Streamreader lesen. Irgendwelche Ratschläge, wie man die Datei nach etwas sucht, wie "Butter", dann die Linie zurückgeben? Alles, was ich gerade habe, ist nur ReadLine(), was, wie Sie erraten können, nur die erste Zeile zurückgibt. – Steve

+0

Dies ist genau die Art von Problem-Datenbanken wurden entwickelt, um zu lösen. – Jason

Antwort

0

Ihre Anfrage ein IEnumerable von Objekten zurückkehren wird, in Ihrem Fall usdProto:

var query = db.Table<usdProto>().Where(v => v.Shrt_Desc.Contains(str1)); 

foreach (var item in query) { 
    new AlertDialog.Builder(this) 
      .SetMessage(item.SomeProperty) 
      .Show(); 
} 

ersetzen SomeProperty mit welcher auch immer Eigentum von usdProto, die Sie wollen

angezeigt werden
+0

Ich habe keinen Fehler, aber nichts passiert. Habe ich die usdProto-Klasse falsch gemacht? – Steve

+0

Sind Sie sicher, dass Ihre Tabelle Daten enthält? – Jason

+0

basierend auf Ihrem Code, erstellen und leeren Sie db und erstellen Sie eine leere Tabelle darin, anstatt eine vorhandene db, die in Ihre App eingebettet ist – Jason