ورود

View Full Version : ارسال یه متن از یه کلاس به یه کلاس دیگر



busy.man
پنج شنبه 03 اردیبهشت 1394, 13:48 عصر
سلام. یه مشکلی هست که ذهنمو خیلی وقته مشغول کرده.

من توی برنامه ام یه پکیج درست کردم که Tools نام داره. توش کلاس های پرکاربرد رو میزارم. حالا مشکل من اینه. من با HttpUrlConnection یه String از نوع Json دریافت میکنم. ( یه متد نوشتم و اونو توی doInBackground در AsyncTask صدا میزنم). حالا میخوام این String رو بفرستم به کلاس MainActivity و روش پردازش انجام بدم.

میخواستم از طریق sharedPreferences انجام بدم که چون توی پکیج اصلی برنامه نیست نمیشه. راه خوب برای این کار چیه!!!

نمیتونم هم اون متد رو توی کلاس اصلی صدا بزنم. چون وقتی AsyncTask Execute میشه کار های doInbackground رو انجام میده و onPostExecute.

حالا من چه کنم ؟؟

ho3ein.3ven
پنج شنبه 03 اردیبهشت 1394, 14:13 عصر
سلام . توی کلاس mainactivity یک متغیر Static تعریف کنید و از کلاس دیگه مقدار اون متغیر رو تغییر بدین .

tux-world
پنج شنبه 03 اردیبهشت 1394, 14:56 عصر
سلام . توی کلاس mainactivity یک متغیر Static تعریف کنید و از کلاس دیگه مقدار اون متغیر رو تغییر بدین .

شما که اصل شی گرایی رو زیر سوال بردید دوست عزیز. دوستمون میتونن از EventBus که یه کتابخونه هستش استفاده کنن. البته من از Async استفاده نمیکنم به جای اون یه ترد با listener مینویسم که بار کمتری داره

nasr
دوشنبه 08 شهریور 1395, 17:55 عصر
سلام
من هر کاری کردم نتونستم با این EvebtBus كار كنم
كتابخونه را اضافه كردم ولی نمیدونم چطور کار میکنه
کسی یه مثال ساده میتونه برای من بزنه؟
ممنون

Nevercom
سه شنبه 09 شهریور 1395, 00:43 صبح
یه راه دیگه این هست که یک اینترفیس درست کنید و بعنوان پارامتر ارسال کنید به متدی که اطلاعات رو از اینترنت دریافت می کنه.
وقتی کارش تموم شد (توی متد onPostExecute مثلاً)، متد موردنظر در اینترفیس رو صدا بزنید تا اطلاعات به دست کلاسی برسه که این اینترفیس رو ارسال کرده.

اینترفیس:

public interface NetworkCallback {

/**
* On Success
*
* @param status statusCode
* @param data actual Data returned by server
*/
void onSuccess(int status, JSONObject data);

/**
* @param error object containing error info
*/
void onFailure(Error error);
}

متد دریافت اطلاعات از اینترنت:


public void getSomeData(NetworkCallback callback) {
new AsyncData(callback).execute();
}

public class AsyncData extends AsyncTask<Void, Void, JSONObject> {
private NetworkCallback callback;

public AsyncData(NetworkCallback callback) {
this.callback = callback;
}

@Override protected JSONObject doInBackground(Void... params) {

// do something and return JSONObject
return null;
}

@Override protected void onPostExecute(JSONObject jsonObject) {
callback.onSuccess(200, jsonObject);
super.onPostExecute(jsonObject);
}
}

استفاده از متد:

getSomeData(new NetworkCallback() {
@Override public void onSuccess(int status, JSONObject data) {
// Here you can access the JSONObject
}

@Override public void onFailure(Error error) {

}
});