Отправка образа Base64 на сервер, а затем получение с сервера для последующего отображения Xamarin

Я новичок в Xamarin Andriod Development. Я пытаюсь отправить изображение в кодировке Base64 в базу данных сервера MySQL, а затем получить кодированное изображение Base64 в базе данных при запуске приложения и его отображении. Мне удалось отобразить всю другую информацию в базе данных, единственное, чего не хватает, — это изображений, когда я открываю приложение.

Мой код выглядит так:

Отправка изображения на сервер

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);

if (resultCode == Result.Ok)
{
int contactID = mContacts[(int)mSelectedPic.Tag].ID;

Stream stream = ContentResolver.OpenInputStream(data.Data);
mSelectedPic.SetImageBitmap(DecodeBitmapFromStream(data.Data, 150, 150));

Bitmap bitmap = BitmapFactory.DecodeStream (stream);
MemoryStream memStream = new MemoryStream ();
bitmap.Compress (Bitmap.CompressFormat.Webp, 100, memStream);
byte[] picData = memStream.ToArray ();

WebClient client = new WebClient ();
Uri uri = new Uri ("MYWESBITE/UpdateContact.php");
NameValueCollection parameters = new NameValueCollection ();
parameters.Add ("Image", Convert.ToBase64String(picData));
parameters.Add ("ContactID", contactID.ToString());

client.UploadValuesAsync (uri, parameters);
client.UploadValuesCompleted += Client_UploadValuesCompleted;
}

}

PHP-код для обработки изображения и сохранения его в базе данных как VARBINARY

    $imgData = base64_encode($mImage);

$sql = "UPDATE Contact SET ImageBase64 = '$imgData' WHERE ID = '$mContactID'";

$result = mysql_query($sql, $link);

if (!$result) {
echo "DB Error, could not query the database\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}

Затем, когда приложение открывается, оно вызывает эту функцию PHP

$sql = "SELECT * FROM Contact";

$result = mysql_query($sql, $link);

if (!$result) {
echo "DB Error, could not query the database\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}

//create an array
$contact_array = array();
while($row =mysql_fetch_assoc($result))
{
$contact_array[] = array("ID" => $row["ID"],
"Name" => $row["Name"],
"Number" => $row["Number"],
"ImageBase64" => base64_encode($row["ImageBase64"])
);
}

echo json_encode($contact_array);

Это показывает, как я превращаю base64_encoded строку в байтовый массив

class Contact
{
public int ID { get; set; }
public string Name { get; set; }
public string Number { get; set; }
public string ImageBase64 { private get; set; }
public byte [] Image
{
get
{
if (ImageBase64 != "" && ImageBase64 != null)
{
byte[] image = Convert.FromBase64String (ImageBase64);

return image;

}

return null;

}
}
}

MainActivity.cs

    protected override void OnCreate(Bundle bundle)
{

base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);

mListView = FindViewById<ListView>(Resource.Id.listView);
mProgressBar = FindViewById<ProgressBar> (Resource.Id.progressBar);

mClient = new WebClient ();
mUrl = new Uri ("MYWEBSITE/GetContacts.php");

//Call the Client
mClient.DownloadDataAsync (mUrl);
mClient.DownloadDataCompleted += MClient_DownloadDataCompleted;}

Тогда, наконец, преобразуется в изображение, как это

    ImageView pic = row.FindViewById<ImageView>(Resource.Id.imgPic);

if (mContacts[position].Image != null)
{

pic.SetImageBitmap(BitmapFactory.DecodeByteArray(mContacts[position].Image, 0, mContacts[position].Image.Length));
}

Всем спасибо за уделенное время, надеюсь, вы поможете мне разобраться в этом!

1

Решение

Несколько вопросов могут помочь ответить на это: В какой момент это не работает? Вы получаете ошибку? или изображение не отображается?

Однако сразу кажется, что вы пытаетесь взаимодействовать с пользовательским интерфейсом из фонового потока. Можете ли вы попробовать обернуть код в вашем MCClient_Downloaded метод в RunOnUIThread?

0

Другие решения

Я получил это на работу сейчас. Я изменил свой тип базы данных на Средний BLOB вместо VARBINARY, а затем избавился от base64_encode () на пути в базу данных, а затем избавился от base64_encode () на выходе из базы данных при создании JSON ,

0

По вопросам рекламы [email protected]