I am making a mobile application with Android Studio and I synchronize it through a WEB REST in C #, the problem is that when synchronizing the images between SQLite and SQL Server, it sends me an error in the data types in my Web Rest. I clarify that I receive everything in JSON format.
BD SQL
CREATE TABLE EVIDENCIA (
IDEVID int NOT NULL PRIMARY KEY IDENTITY(1,1),
EVID varBinary(max) NOT NULL,
FPER varchar(25) NOT NULL
);
Code C #
public string InsertarEvidencia(Evidencia evidencia)
{
SqlConnection con = new SqlConnection(cadenaConexion);
con.Open();
string sql = "INSERT INTO EVIDENCIA (EVID, FPER) VALUES (@EVID, @FPER); SELECT SCOPE_IDENTITY();";
SqlCommand cmd = new SqlCommand(sql, con);
String e = evidencia.EVID.ToString();
cmd.Parameters.Add("@EVID", System.Data.SqlDbType.VarBinary).Value = e;
cmd.Parameters.Add("@FPER", System.Data.SqlDbType.VarChar).Value = evidencia.FPER;
var insertedID = cmd.ExecuteScalar();
string d = Convert.ToString(insertedID);
return d;
}
public List<Evidencia> ObtenerEvidencia()
{
List<Evidencia> lista = new List<Evidencia>();
SqlConnection con = new SqlConnection(cadenaConexion);
con.Open();
string sql = "SELECT IDEVID, EVID, FPER FROM EVIDENCIA";
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader reader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
while (reader.Read())
{
Evidencia cli = new Evidencia();
cli = new Evidencia();
cli.IDEVID = reader.GetInt32(0);
cli.EVID = (byte[])reader["EVID"];
cli.FPER = reader.GetString(2);
lista.Add(cli);
}
return lista;
}
Evidence Class
public class Evidencia
{
public int IDEVID { get; set; }
public byte[] EVID { get; set; }
public string FPER { get; set; }
}
Controller
public class EvidenciaController : Controller
{
// GET: AEvidencia/Evidencia
EvidenciaManeager evidenciaManeager = new EvidenciaManeager();
public EvidenciaController()
{
}
[HttpGet]
public JsonResult GetEvidencia()
{
return Json(new GetEvidencia
{
estado = 1,
evidencia = evidenciaManeager.ObtenerEvidencia()
}, JsonRequestBehavior.AllowGet);
}
public JsonResult PostEvidencia(int? id, Evidencia item)
{
switch (Request.HttpMethod)
{
case "POST":
return Json(new PostEvidencia
{
estado = "1",
mensaje = "Creacion Exitosa",
idEvidencia = evidenciaManeager.InsertarEvidencia(item),
}, JsonRequestBehavior.AllowGet);
}
return Json(new { Error = true, Message = "Operación HTTP desconocida" });
}
}
Android Code
Database
public void onCreate(SQLiteDatabase db) { String CREATE_TABLE_CONTACTS="CREATE TABLE " + TABLE_CONTACTS + "(" + KEY_ID +" INTEGER PRIMARY KEY," + KEY_FNAME +" TEXT," + KEY_POTO1 +" BLOB" + ")"; db.execSQL(CREATE_TABLE_CONTACTS); } public void addEvidencia(Contact contact){ SQLiteDatabase db = this.getReadableDatabase(); ContentValues values=new ContentValues(); values.put(KEY_FNAME, contact.getFName()); values.put(KEY_POTO1, contact.getImage1() ); db.insert(TABLE_CONTACTS, null, values); db.close(); }
class Contact
public Contact(String fname, byte[] img1){
this._fname = fname;
this._img1 = img1;
}
MainActivity
private byte[] profileImage(Bitmap b) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); b.compress(Bitmap.CompressFormat.PNG, 0, bos); return bos.toByteArray(); } // function to get values from the Edittext and image private void getValues() { f_name = fname.getText().toString(); photo1 = profileImage(bp1); } //Insert data to the database private void addEvidencia() { getValues(); db.addEvidencia(new Contact(f_name, photo1)); Toast.makeText(getApplicationContext(), "Saved successfully", Toast.LENGTH_LONG).show(); }