Issue
I am getting an error error: Only the original thread that created a view hierarchy can touch its views
in line
BookingAdapter expListAdapter = new BookingAdapter (this, listDataHeader, listDataChild);
try{
explistView.SetAdapter (expListAdapter);
explistView.SetGroupIndicator (null);
}
catch(Exception e) {
Toast.MakeText (this,e+"",ToastLength.Long).Show();
}
and here is my piece of code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System.ServiceModel.Web;
using SalonServices;
using System.ServiceModel;
namespace PariSalon
{
[Activity (Label = "BookingRequest")]
public class BookingRequest : Activity
{
public List<GetServices> listDataHeader;
public List<GetServices> services;
Dictionary<GetServices, List<String>> listDataChild;
ExpandableListView explistView;
public static readonly EndpointAddress EndPoint = new EndpointAddress("http://xxx.xxx.Xx.xx/SalonService/SalonServices.svc");
//public static readonly EndpointAddress EndPoint = new EndpointAddress("http://xxxx");
private SalonServicesClient serviceClient;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView(Resource.Layout.Booking_request);
InitializeSalonServiceClient();
Button submit = FindViewById<Button> (Resource.Id.button2);
//string userid = "1";
//serviceClient.GetServicesForUserAsync (userid);
string userid = "1";
serviceClient.GetServicesForUserAsync (userid);
//serviceClient.GetServicesForUserAsync (userid);
submit.Click += delegate {
Intent intent = new Intent(this, typeof(Booking_Request_sent));
StartActivity(intent);
};
// Create your application here
/*
explistView.SetOnGroupClickListener( new OnGroupClickListener());
//Catch click event attempt 2
explistView.GroupClick += (object pobjSender, ExpandableListView.GroupClickEventArgs pArgs) =>
{
int len = expListAdapter.GroupCount;
for(int i=0;i<len;i++)
{
if(i!=groupPosition)
{
explistView.CollapseGroup(i);
}
if(i==groupPosition){
if(explistView.IsGroupExpanded(groupPosition)){
explistView.CollapseGroup(groupPosition);
}
else {
explistView.ExpandGroup(groupPosition);
}
}
}
};*/
}
private void InitializeSalonServiceClient()
{
BasicHttpBinding binding = CreateBasicHttp();
serviceClient = new SalonServicesClient(binding, EndPoint);
//serviceClient.GetServicesForUserCompleted += GetServicesForUserCompleted;
//serviceClient.GetProductDetailsCompleted += GetProductDetailsCompleted;
serviceClient.GetServicesForUserCompleted += GetServicesForUserCompleted;
}
private void GetServicesForUserCompleted(object sender, GetServicesForUserCompletedEventArgs getServiceDataCompletedEventArgs)
{
string msg = null;
if (getServiceDataCompletedEventArgs.Error != null)
{
msg = getServiceDataCompletedEventArgs.Error.Message;
}
else if (getServiceDataCompletedEventArgs.Cancelled)
{
msg = "Request was cancelled.";
}
else
{
services = new List<GetServices>(getServiceDataCompletedEventArgs.Result);
prepareListData ();
explistView = FindViewById<ExpandableListView> (Resource.Id.expandableselectservicetype);
BookingAdapter expListAdapter = new BookingAdapter (this, listDataHeader, listDataChild);
try{
explistView.SetAdapter (expListAdapter);
explistView.SetGroupIndicator (null);
}
catch(Exception e) {
Toast.MakeText (this,e+"",ToastLength.Long).Show();
}
}
}
private static BasicHttpBinding CreateBasicHttp()
{
BasicHttpBinding binding = new BasicHttpBinding
{
Name = "basicHttpBinding",
MaxBufferSize = 2147483647,
MaxReceivedMessageSize = 2147483647
};
TimeSpan timeout = new TimeSpan(0, 0, 50);
binding.SendTimeout = timeout;
binding.OpenTimeout = timeout;
binding.ReceiveTimeout = timeout;
return binding;
}
private void prepareListData() {
listDataHeader = new List<GetServices>();
listDataChild = new Dictionary<GetServices, List<String>>();
listDataHeader.Clear ();
if (services != null) {
foreach (GetServices pd in services) {
listDataHeader.Add (pd);
}
// Adding child data
//listDataHeader.Add("Top 250/n");
//listDataHeader.Add("Now Showing");
//listDataHeader.Add("Coming Soon..");
List<String> childLabel = new List<String> ();
childLabel.Add ("Date :");
childLabel.Add ("Time :");
childLabel.Add ("User :");
childLabel.Add ("Second User:");
childLabel.Add ("Status :");
childLabel.Add ("Cancel ");
listDataChild.Add (listDataHeader.ElementAt (0), childLabel); // Header, Child data
listDataChild.Add (listDataHeader.ElementAt (1), childLabel);
listDataChild.Add (listDataHeader.ElementAt (2), childLabel);
}
}
}
}
I have another adapter class but I think the error is only in this class. How can I solve this problem. Can any one please help me to solve this problem.
Solution
You're calling GetServicesForUserCompleted
method from SalonServicesClient
on worker thread. Invoke it on the UI thread instead.
Answered By - a.ch.
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.