Operador '! =' No se puede aplicar a los operandos de tipo 'Tarea' e 'int'

Recientemente comencé a crear aplicaciones de Android con Xamarin. Intento crear una pequeña base de datos local con SQLite. He utilizado el siguiente tutorial desde el sitio web de documentación Xamarin .

Lamentablemente me sale un error:

Error CS0019: El operador '! =' No se puede aplicar a los operandos de tipo 'Tarea' e 'int' (CS0019)

Mi código es el siguiente:

private string createDatabase(string path) { try { var connection = new SQLiteAsyncConnection(path);{ connection.CreateTableAsync<Person>(); return "Database created"; } } catch (SQLiteException ex) { return ex.Message; } } private string insertUpdateData(Person data, string path) { try { var db = new SQLiteAsyncConnection(path); if ( db.InsertAsync(data) != 0) db.UpdateAsync(data); return "Single data file inserted or updated"; } catch (SQLiteException ex) { return ex.Message; } } private int findNumberRecords(string path) { try { var db = new SQLiteConnection(path); // this counts all records in the database, it can be slow depending on the size of the database var count = db.ExecuteScalar<int>("SELECT Count(*) FROM Person"); // for a non-parameterless query // var count = db.ExecuteScalar<int>("SELECT Count(*) FROM Person WHERE FirstName="Amy"); return count; } catch (SQLiteException ex) { return -1; } } 

Y la clase Person es la siguiente:

 using System; using SQLite; namespace HelloWorld { public class Person { [PrimaryKey, AutoIncrement] public int ID { get; set; } public string FullName { get; set; } public string CarLicense { get; set; } public override string ToString() { return string.Format("[Person: ID={0}, FullName={1}, CarLicense={2}]", ID, FullName, CarLicense); } } } 

¿Puede alguien ayudarme con este error?

Puedes hacerlo así:

 if ( (await db.InsertAsync(data)) != 0) 

También vea esta respuesta por razones de por qué a menudo se prefiere await a usar .Result .

En lugar de usar Result , que puede causar bloqueos muertos, debe esperar el resultado:

 if (await db.InsertAsync(data) != 0) { await db.UpdateAsync(data); } 

Esto requiere que su método sea asíncrono también, por lo que la firma debería leer:

 private async Task<string> insertUpdateData(...) 

Esto le está diciendo que usted necesita comparar el resultado, en vez de la tarea. Actualice esta línea:

 if ( db.InsertAsync(data) != 0) 

a

 if ( db.InsertAsync(data).Result != 0) 

Puede utilizar async, esperar si desea que innsertUpdateData será asincrónico.

 private async Task<string> insertUpdateData(Person data, string path) { try { var db = new SQLiteAsyncConnection(path); if ( 0 != await db.InsertAsync(data)) await db.UpdateAsync(data); return "Single data file inserted or updated"; } catch (SQLiteException ex) { return ex.Message; } } 

Necesita agregar .result en db.InsertAsync (data)

  • Xamarin / Android: F # scoping - ¿Cómo veo un espacio de nombres en un archivo diferente?
  • Cambiar el fondo de la actividad del código
  • Puedo usar adb shell para enviar comandos a mi aplicación
  • Biblioteca C # .dll en la aplicación para Android
  • MonoDroid GetSpans último parámetro
  • Manejo adecuado del cambio de configuración
  • Xamarin, Android. Cada vez que ejecute la aplicación en el dispositivo, la aplicación se unistalled y luego se instala de nuevo.
  • ¿Cuál es la contraparte de iOS 'QLPreviewController o UIDocumentInteractionController en Android?
  • Las compilaciones / implementaciones de Xamarin.Android son muy lentas. ¿Cómo acelerarlos?
  • Cómo pasar el parámetro al método java desde c # en JNI
  • ¿Puedo obtener una devolución de llamada en la clase de aplicación siempre que se inicie una nueva actividad en toda la aplicación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.