2017-03-21 1 views
0

zeigen Ich benutze Web-Service zum Anzeigen von Bild in Bildansicht. Aber Web-Service-Bild wird im SYSTEM.BYTE [] Format angezeigt. Also, wie zu konvertieren oder das Bild in Bildansicht in Xamarin Android-Anwendung anzuzeigen?Wie Bild auf Bildansicht mit Webservices und JSON

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); 
    } 

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; 
     } 
    } 
} 

Dies ist JSON-Code:

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(); 
    } 
} 

Antwort

0
public static void SetImageFromByteArray (byte[] iArray, UIImageView imageView) 
{ 
    if (iArray != null && iArray.Length > 0) { 
     Bitmap bitmap = BitmapFactory.DecodeByteArray (iArray, 0, iArray.Length); 
     imageView.SetImageBitmap (bitmap); 
    } 
} 

Das ist es. Wenn dies nicht funktioniert, ist Ihr Byte-Array möglicherweise kein gültiges Bild.

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