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:
- ¿Cómo cambiar dinámicamente el color de la forma?
- ¿Incompatibilidades de la capa de servicio MonoTouch / MonoDroid?
- MarkerClick funciona pero InfoWindowClick no abre ViewModel
- Http sesión siempre se crea en la versión Android ModernHttpClient (okHttp1.5)
- Circular ImageView en Xamarin
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?
- Manera correcta de almacenar la clave de cifrado para la base de datos SqlCipher
- MvvmCross MvxException "No se pudo construir e inicializar ViewModel" en la configuración RELEASE
- Diseño personalizado para DialogFragment OnCreateView vs. OnCreateDialog
- Xamarin forma la imagen de Android no se está comprimiendo
- Cómo instalar dos actividades como una aplicación en Xamarin Android C #
- ¿Qué podría estar causando el error "OutputPath propiedad no está establecida para proyecto ProjectName.csproj" en mi proyecto MonoDevelop
- Android - ListView onItemClick () no disparando en 4.1 jellybean
- Xamarin Archivo de recursos Android no encontrado
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)
- Analizar archivo XML local en Android
- Declarar una variable global para usar en todas las actividades