2017-07-27 5 views
0

Ich habe versucht, dieses Video zu folgen mit SQLite in Xamarin Formen zu lernen arbeiten, und ich bin festXamarin Forms - Arbeiten mit SQLite

https://www.youtube.com/watch?v=FVH-9zjRP9M

project.Droid

class LocalDatabaseHelper : Classes.ILocalDatabaseHelper 
{ 
    public string GetLocalFilePath(string fileName) 
    { 
     string docFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
     string libFolder = Path.Combine(docFolder, "..", "Library", "Databases"); 

     if (!Directory.Exists(libFolder)) 
     { 
      Directory.CreateDirectory(libFolder); 
     } 
     return Path.Combine(libFolder, fileName); 
    } 
} 

Projekt (pcl)

public static Classes.TaskReminder.TaskReminderDatabaseOperation Database 
    { 
     get 
     { 
      if (database == null) 
      { 
       string LocalFilePath = ""; 
       if(Device.OS==TargetPlatform.Android) 
       { 
        LocalFilePath = DependencyService.Get<Classes.ILocalDatabaseHelper>().GetLocalFilePath("TaskReminder.db3"); 
       } 
       database = new Classes.TaskReminder.TaskReminderDatabaseOperation(LocalFilePath); 
      } 
      return database; 
     } 
    } 

public interface ILocalDatabaseHelper 
{ 
    string GetLocalFilePath(string fileName); 
} 

Und es gibt mir Unhandled Ausnahme, wenn e xecuting

LocalFilePath = DependencyService.Get<Classes.ILocalDatabaseHelper>().GetLocalFilePath("TaskReminder.db3"); 

bitte helfen. Danke im Voraus.

HINWEIS (weitere Informationen):

Projekt (PCL)

public class TaskReminderDatabaseOperation 
    { 
     readonly SQLiteAsyncConnection database; 
     public TaskReminderDatabaseOperation(string dbPath) 
     { 
      database = new SQLiteAsyncConnection(dbPath); 
      database.CreateTableAsync<TaskReminder>().Wait(); 
     } 

     public Task<List<TaskReminder>> GetTaskRemindersAsync() 
     { 
      return database.Table<TaskReminder>().ToListAsync(); 
     } 

     public Task<TaskReminder> GetTaskReminder(DateTime datetime) 
     { 
      return database.Table<TaskReminder>().Where(i => i.ReminderDateTime == datetime).FirstOrDefaultAsync(); 
     } 

     public Task<int> SaveTaskReminder(TaskReminder taskReminder) 
     { 
      if (taskReminder.Id == 0) 
      { 
       return database.InsertAsync(taskReminder); 
      } 
      else 
      { 
       return database.UpdateAsync(taskReminder); 
      } 
     } 

     public Task<int> DeleteTaskReminder(TaskReminder taskReminder) 
     { 
      return database.DeleteAsync(taskReminder); 
     } 
    } 
+0

Was ist die Ausnahme? Und wie schmückt sich Ihr LocalDatabaseHelper? –

+0

Eine nicht behandelte Ausnahme ist aufgetreten. aufgetreten –

+0

Haben Sie das korrekte DependencyService-Attribut in Ihrem LocalDatabaseHelper? – Jason

Antwort

0

Schauen Sie genau auf das Video, um 29 minutes and 10 seconds. Sie werden sehen, dass er der Projektklasse ein Attribut hinzufügt. Dies registriert die Abhängigkeit mit dem Dependency Service in Xamarin.Forms.

Sie haben wahrscheinlich vergessen, das zu tun, deshalb erhalten Sie eine NullReferenceException, wenn Sie versuchen, die Implementierung der Schnittstelle aufzulösen.

Bitte schauen Sie in die Funktionsweise des Dependency Service, um zu verstehen, wie diese Dinge funktionieren und beheben Sie diese Fehler für sich selbst, anstatt nur dem Video zu folgen.

+0

yup. realisierte das ... danke! =) –