ارسال لیستی از داده ها بین دو Activity (هر نوع داده ای)
سلام امروز بهتون نحوه ارسال لیستی از داده ها رو میدم که مهم نیست چه نوع داده ای باشه و فکر کنم اولین بار باشه چون هیچ اموزشی نبود واسه این خلاقیت
خوب اول یه کلاس درست میکنیم
public class tb_Clob_Login
{
public int ID { get; set; }
public string FName { get; set; }
public string UserName { get; set; }
public string Pass { get; set; }
public string Mobile { get; set; }
public string Emailr { get; set; }
public byte[] AccessT { get; set; }
public bool Ban { get; set; }
public string BanDateTime { get; set; }
public string BanDescription { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public bool Show1 { get; set; }
}
خوب حالا یه تابع برای تبدیل لیست به بایت باید داشته باشیم
این تایع یک شیع رو میگیره و به ارایه ای از بایت تقییر میده.
public byte[] ToByteArray(object source)
{
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, source);
return stream.ToArray();
}
}
خوب حالا میریم سراق اکتیویتی که لیست داده ها قراره اجرا شه
ما فرض بر این میگیریم که کاربر روی دکمه ورود کلیک کرده و پس از دریافت اطلاعات اون و ریختنش توی یکه لیست از کلاس بالا داده ها رو میفرستیم واسه اکتیویتی دوم که کاربر وارد شده رو نشون میده و اطلاعات رو میگیره
در فرم اول :
List<tb_Clob_Login> _result2 = new List<tb_Clob_Login>(); // ایجاد لیستی از کلاس
WebService1.tb_Clob_Login tb_Clob_LoginTemp = new WebService1.tb_Clob_Login(); // یه کلاس موقت از رو اون میسازم که بتونم داده ها رو به سرور لاگین کنم
tb_Clob_LoginTemp.UserName = Username1;
tb_Clob_LoginTemp.Pass = Password;
tb_Clob_LoginTemp.Emailr = Username1;
tb_Clob_LoginTemp.Ban = false;
tb_Clob_LoginTemp.Show1 = true;
_result2 = WebServiceTemp1.Logining_tb_Clob_Login(tb_Clob_Log inTemp).Cast <tb_Clob_Login>().ToList(); // اینجا لاگین میشه و اگر داده ای برگرده داده ها رو داخل لیست پر میکنه
if (_result2.Count > 0)
{
PublicClass1 PublicClassTemp = new PublicClass1(); // چون من این تابع تبدیل کلاس به بایت رو داخل یه کلاس به اسم PublicClass1 ریختم باید یه نمونه ازش بسازم
byte[] ConvertDataToByteTemp = PublicClassTemp.ToByteArray(_result2); // اینجا هم یه متقییر از نوع ارایه ای از بایت ها میسازم که کلاس تبدیل لیست ام رو به بایت هم صدا زدم
Intent intentTemp = new Intent(this ,typeof( ClobFlyOutMainActivity)); // در این قسمت یه نمونه از اکتیویتی که قراره داده ها رو بگره میسازم
intentTemp.PutExtra("UserLogin", ConvertDataToByteTemp); // به اون نمونه که خط قبل ساختم با این دستور اون کلاسی که به بایت تبدیل شده رو میفرستم و نام ارسال شده هم گزاشتم UserLogin
StartActivity(intentTemp); // و نمونه ساخته شده رو استارت میکنم
}
else
{
Toast.MakeText(this, "رمز ورود اشتباه میباشد!", ToastLength.Long).Show();
Vibrator VibratorTemp1 = (Vibrator)GetSystemService(Context.VibratorService );
VibratorTemp1.Vibrate(100);
}
تا اینجا کار اکتویتی اول تموم شد و داده ها ارسال میشه حالا باید بریم بگیریمش
تو اکتیوتی دریافت کننده این کد را اضافه میکنیم
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
BinaryFormatter bf = new BinaryFormatter(); // یه متقییر از نوع روبرو تعریف میکنیم
byte[] TT = (byte[])Intent.Extras.GetByteArray("UserLogin"); // با این دستور یه متقییر از نوع بایتی از ارایه تعریف میکنیم که مقدار دریافتی رو بشه میدیم
using (Stream ms = new MemoryStream(TT)) // بقیش هم مشخصه
{
List<tb_Clob_Login> myList = (List<tb_Clob_Login>)bf.Deserialize(ms); // تبدیل بایت به لیست داده ای که ارسال شده بود
}
}
موفق باشید(اگه میشد برگردم به زمان قدیم به تاریخی برمیگشتم که سازنده اندروید فکر ساختنش به ذهنش رسیده بود و برای نجات جان بشریت از این فاجه نرم افزاری میکشتمش :قهقهه:)