Xamarin 如何使用webservices和json在imageview上显示图像

Xamarin 如何使用webservices和json在imageview上显示图像,xamarin,Xamarin,我正在使用web服务在imageview中显示图像。但web服务映像以SYSTEM.BYTE[]格式显示。那么如何在xamarin android应用程序中在imageview中转换或显示图像呢 Webservice.asmx: [WebMethod(MessageName = "BindHospName", Description = "Bind Hospital Name Control")] [ScriptMethod(ResponseFormat = ResponseFormat

我正在使用web服务在imageview中显示图像。但web服务映像以SYSTEM.BYTE[]格式显示。那么如何在xamarin android应用程序中在imageview中转换或显示图像呢

Webservice.asmx:

[WebMethod(MessageName = "BindHospName", Description = "Bind Hospital Name Control")]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
    [System.Xml.Serialization.XmlInclude(typeof(GetHospName))]
    public string BindHosp(decimal SpecID)
    {
        JavaScriptSerializer objJss = new JavaScriptSerializer();
        List<GetHospName> HospName = new List<GetHospName>();
        try
        {
            ConnectionString();
            cmd = new SqlCommand("select b.HID,b.HospName,b.Logo from HospitalRegBasic b inner join HospitalRegClinical c on b.HID=c.HID " +
                                 "where b.EmailActivationCode <> '' and b.EmailActivationStatus = 1 and b.Status = 1 and c.SPEC_ID = @SpecID ", conn);
            cmd.Parameters.AddWithValue("@SpecID", SpecID);
            dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    var getHosp = new GetHospName
                    {
                        HospID = dr["HID"].ToString(),
                        HospName = dr["HospName"].ToString(),
                        HospLogo = dr["Logo"].ToString()
                    };

                    HospName.Add(getHosp);
                }
            }
            dr.Close();
            cmd.Dispose();
            conn.Close();
        }
        catch (Exception)
        {
            throw;
        }
        return objJss.Serialize(HospName);
    }
[WebMethod(MessageName=“BindHospName”,Description=“绑定医院名称控制”)]
[ScriptMethod(ResponseFormat=ResponseFormat.Json,UseHttpGet=true)]
[System.Xml.Serialization.xmlclude(typeof(GetHospName))]
公共字符串BindHosp(十进制SpecID)
{
JavaScriptSerializer objJss=新的JavaScriptSerializer();
List HospName=新列表();
尝试
{
连接字符串();
cmd=new-SqlCommand(“在b.HID=c.HID上从HospitalRegBasic b内部连接HospitalRegClinical上选择b.HID、b.HospName、b.Logo”+
“其中b.EmailActivationCode''和b.EmailActivationStatus=1,b.Status=1,c.SPEC_ID=@SpecID”,康涅狄格州);
cmd.Parameters.AddWithValue(“@SpecID”,SpecID);
dr=cmd.ExecuteReader();
如果(哈斯罗博士)
{
while(dr.Read())
{
var getHosp=new GetHospName
{
HospID=dr[“HID”].ToString(),
HospName=dr[“HospName”].ToString(),
HospLogo=dr[“Logo”].ToString()
};
HospName.Add(getHosp);
}
}
Close博士();
cmd.Dispose();
康涅狄格州关闭();
}
捕获(例外)
{
投掷;
}
返回objJss.Serialize(HospName);
}
Class.cs:

namespace HSAPP
{
    class ContListViewHospNameClass : BaseAdapter<GetHospNames>
    {
        List<GetHospNames> objList;

        Activity objActivity;

        public ContListViewHospNameClass (Activity objMyAct, List<GetHospNames> objMyList) : base()
        {
            this.objActivity = objMyAct;
            this.objList = objMyList;
        }

        public override GetHospNames this[int position]
        {
            get
            {
                return objList[position];
            }
        }

        public override int Count
        {
            get
            {
                return objList.Count;
            }
        }

        public override long GetItemId(int position)
        {
            return position;
        }

        public static Bitmap bytesToBitmap(byte[] imageBytes)
        {

            Bitmap bitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);

            return bitmap;
        }

        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var item = objList[position];

            if (convertView == null)
            {
                convertView = objActivity.LayoutInflater.Inflate(Resource.Layout.ContListViewHospName, null);
            }
            convertView.FindViewById<TextView>(Resource.Id.tvHospID).Text = item.HospID;
            convertView.FindViewById<TextView>(Resource.Id.tvHospName).Text = item.HospName;

            byte[] img =item.HospLogo;

            Bitmap bitmap = BitmapFactory.DecodeByteArray(img, 0, img.Length);

            convertView.FindViewById<ImageView>(Resource.Id.imgLogo).SetImageBitmap(bitmap);
            return convertView;
        }
    }
}
namespace-HSAPP
{
类ContListViewHospNameClass:BaseAdapter
{
列表对象列表;
活动客观性;
public ContListViewHospNameClass(活动objMyAct,列表objMyList):base()
{
this.objActivity=objMyAct;
this.objList=objMyList;
}
public override GetHospNames此[int position]
{
得到
{
返回对象列表[位置];
}
}
公共覆盖整数计数
{
得到
{
返回objList.Count;
}
}
公共覆盖长GetItemId(int位置)
{
返回位置;
}
公共静态位图bytesToBitmap(字节[]图像字节)
{
位图位图=BitmapFactory.DecodeByteArray(imageBytes,0,imageBytes.Length);
返回位图;
}
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
var项目=对象列表[位置];
if(convertView==null)
{
convertView=objActivity.LayoutInflater.Inflate(Resource.Layout.ContListViewHospName,null);
}
convertView.findviewbyd(Resource.Id.tvospid).Text=item.HospID;
convertView.FindViewById(Resource.Id.tvHospName).Text=item.HospName;
字节[]img=item.HospLogo;
位图位图=位图工厂.DecodeByteArray(img,0,img.Length);
convertView.findviewbyd(Resource.Id.imgLogo).SetImageBitmap(位图);
返回视图;
}
}
}
这是JSON代码:

private void BindControl_BindHospCompleted(object sender, BindControl.BindHospCompletedEventArgs e)
{
    jsonValue = e.Result.ToString();

    if (jsonValue == null)
    {
        Toast.MakeText(this, "No Data For Bind", ToastLength.Long).Show();
        return;
    }

    try
    {
        JArrayValue = JArray.Parse(jsonValue);
        list = new List<GetHospNames>();
        int count = 0;
        while (count < JArrayValue.Count)
        {

            GetHospNames getHospName = new GetHospNames(JArrayValue[count]["HospID"].ToString(), JArrayValue[count]["HospName"].ToString(),JArrayValue[count]["Logo"]);
            list.Add(getHospName);
            count++;
        }
        listView.Adapter = new ContListViewHospNameClass(this, list);
    }
    catch (Exception ex)
    {
        Toast.MakeText(this, ex.ToString(), ToastLength.Long).Show();
    }
}
private void BindControl\u bindhospccompleted(对象发送方,BindControl.bindhospccompletedeventargs e)
{
jsonValue=e.Result.ToString();
if(jsonValue==null)
{
Toast.MakeText(这是“没有绑定数据”,ToastLength.Long).Show();
返回;
}
尝试
{
JArrayValue=JArray.Parse(jsonValue);
列表=新列表();
整数计数=0;
while(count
就这样。如果这不起作用,则字节数组可能不是有效的映像

public static bool IsValidImage(byte[] bytes)
{
    try {
        using(MemoryStream ms = new MemoryStream(bytes))
           Image.FromStream(ms);
    }
    catch (ArgumentException) {
       return false;
    }
    return true; 
}
public static bool IsValidImage(byte[] bytes)
{
    try {
        using(MemoryStream ms = new MemoryStream(bytes))
           Image.FromStream(ms);
    }
    catch (ArgumentException) {
       return false;
    }
    return true; 
}