ورود

View Full Version : دریافت نکردن داده از سرور توسط کلاس Asynctask



JYasProgramer
شنبه 20 خرداد 1396, 01:57 صبح
سلام دوستان، پروژه ای طراحی کردم که نویگیشن دراور داره و به محض باز شدن اپ میره به صفه اول که در اون 10 تا زبانه گذاشتم که هر گدوم یه فرگمت رو بارگزاری میکنه، حالا در این فرگمنتا، کلاس Asynctask رو هر کدوم جدا گانه فراخونی میکنن اما گاهی پشت سر هم بین آیتم های نویگیشن حرکت میکنم و مرتب در این حرکت به صفه اول نویگیشن دراور برمیگردم بضی وقتا داده رو لود نمیکنه، به نظر شما مشکل از کلاس Asynctask هست؟

spiderman200700
یک شنبه 21 خرداد 1396, 00:14 صبح
سلام.
کدتون رو قرار بدید که بشه کمک کرد

JYasProgramer
دوشنبه 22 خرداد 1396, 14:22 عصر
سلام با تشکر
بله در ابتدا اکت (اکتیویتی) به نام homescreen فراخونی میشه که در این اکت نویگیشن دراور مثلا با 2 آیتم ساخته میشه که از نوع فرگمنت هستن به نامهای AdvertisingFragment, AddingAdFragment
در AdvertisningFragment با استفاده از tablayout زبانه های تب رو ساختم که حاوری مثلا 12 تب هست که در هر تب یک فرگمنت فراخونی میشه
پس به محض ورود میره به homescreen و در اون نویگیشن با دو آیتم از نوع فرگمنت که باز هم به محض ورود میره به اولین آیتم نویگیشن (فرگمنت) ینی AdvertisingFragment که در این هم در tablayout مربوطه 12 تا فرگمنت ساخته میشه
اما نحوه فراخونی Asynctask ها:
اولین آسینک در homescreen فراخونی میشه با این متد

async.executeOnExecutor(AsyncTack.THREAD_POOL_EXEC UTOR)

هنگامی که آیتم اول نویگ (نویگیشن دراور) با نام AdvertisingFragment فراخونی میشه (به محض ورود) هم به ترتیب کلاس های آسینک زیر فراخونی میشن

new AsyncManager().executeOnExecutor(AsyncTask.THREAD_ POOL_EXECUTOR, "1", "1");

asyncCategorys = new AsyncCategorys();
asyncCategorys.executeOnExecutor(AsyncTask.THREAD_ POOL_EXECUTOR);

حال پس از فراخونی کلاس homescreen از نوع Activity و کلاس AdvertisingFragment از نوع Fragment, کلاس های مربوط به tablayout که دقیقا مثل هم هستن از نظر کد فراخونی میشن که نام کلاس AllAds از نوع فرگمنت هست و آسینک زیر در هر کدوم اجرا میشن که به محض ورود انجام میشه: (تنها بخش هایی از کلاس رو به خاطر خصوصی بودن پروژه گذاشتم)

Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
new AsyncAds().executeOnExecutor(AsyncTask.THREAD_POOL _EXECUTOR);
}
}, 500);

new AsyncCatSlider().executeOnExecutor(AsyncTask.THREA D_POOL_EXECUTOR, "1", "2");
new AsyncCatSlider().executeOnExecutor(AsyncTask.THREA D_POOL_EXECUTOR, "1", "3");

کلاس Homescreen:

public class HomescreenActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
getWindow().getDecorView().setLayoutDirection(View .LAYOUT_DIRECTION_RTL);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_homescreen);

prefManager = new PrefManager(this);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);


fragmentManager = getSupportFragmentManager();

lst = new ArrayList<>();
dlNavData dlNavData;
for (int i = 0; i < 9; i++) {
dlNavData = new dlNavData();
String title = "";
int img = 0;
switch (i) {
case 0:
title = getResources().getString(R.string.nav_dr_advertise s);
img = R.mipmap.nav_dr_advertises;
break;
case 1:
title = getResources().getString(R.string.nav_dr_insert_ad vertising);
img = R.mipmap.nav_dr_insert_advertising;
break;
case 2:
title = getResources().getString(R.string.nav_dr_insert_te legram_advertising);
img = R.mipmap.ic_cat_telegram;
break;
case 3:
title = getResources().getString(R.string.nav_dr_inserted_ advertising);
img = R.mipmap.nav_dr_inserted_advertising;
break;
case 4:
title = getResources().getString(R.string.nav_dr_payment_r eporte);
img = R.mipmap.nav_dr_payment_reporte;
break;
case 5:
title = getResources().getString(R.string.nav_dr_pony);
img = R.mipmap.nav_dr_pony;
break;
case 6:
title = getResources().getString(R.string.nav_dr_setting);
img = R.mipmap.nav_dr_settings;
break;
case 7:
title = getResources().getString(R.string.nav_dr_invite);
img = R.mipmap.nav_dr_invite;
break;
case 8:
title = getResources().getString(R.string.nav_dr_about_us) ;
img = R.mipmap.ic_about_us;
break;
}
dlNavData.title = title;
dlNavData.imgUri = img;
lst.add(dlNavData);
}
jParser = new JSONParser();
async = new AsyncManager();
async.executeOnExecutor(AsyncTask.THREAD_POOL_EXEC UTOR);
}
}

کلاس Advertinsing

public class AdvertisingFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_advertising, container, false);

jParser = new JSONParser();

finalLstCat = new ArrayList<>();
dlCatObj dlCatObj = new dlCatObj();
dlCatObj.cat_name = "همه";
dlCatObj.id = 1;
finalLstCat.add(dlCatObj);
dlCatObj = new dlCatObj();
dlCatObj.cat_name = "رستوران و فست فود";
dlCatObj.id = 2;
finalLstCat.add(dlCatObj);
dlCatObj = new dlCatObj();

new AsyncManager().executeOnExecutor(AsyncTask.THREAD_ POOL_EXECUTOR, "1", "1");

asyncCategorys = new AsyncCategorys();
asyncCategorys.executeOnExecutor(AsyncTask.THREAD_ POOL_EXECUTOR);

tabLayout = (TabLayout) view.findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);

tabFont = new TabFont();

return view;
}


private void setupTabIcons(List<dlCatObj> lstCats) {
for (int i = 0; i < lstCats.size(); i++) {
switch (lstCats.get(i).id) {
case 1:
tabLayout.getTabAt(i).setIcon(R.mipmap.ic_cat_home );
break;
case 2:
tabLayout.getTabAt(i).setIcon(R.mipmap.ic_fast_foo d);
break;
}
}
}

private void createViewPager(final ViewPager viewPager) {
final ViewPagerAdapter adapter = new ViewPagerAdapter(getActivity().getSupportFragmentM anager());
viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentStatePagerAdapter {

public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}

@Override
public Fragment getItem(int position) {
Fragment fragment = null;
Bundle bundle;
switch(position) {
case 0:
bundle = new Bundle();
bundle.putInt("catID", 1);
bundle.putString("cat_name", "همه");
fragment = new AllAds();
fragment.setArguments(bundle);
break;
case 1:
bundle = new Bundle();
bundle.putInt("catID", 2);
bundle.putString("cat_name", "رستوران و فست فود");
fragment = new FastfoodFragment();
fragment.setArguments(bundle);
break;
}
return fragment;
}

@Override
public int getCount() {
return finalLstCat.size();
}

@Override
public CharSequence getPageTitle(int position) {
return finalLstCat.get(position).cat_name;
}
}

}

و بخش هایی از کلاس تب AllAds

public class AllAds extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tab_fragment_one, container, false);
jParser = new JSONParser();

Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
new AsyncAds().executeOnExecutor(AsyncTask.THREAD_POOL _EXECUTOR);
}
}, 500);

new AsyncCatSlider().executeOnExecutor(AsyncTask.THREA D_POOL_EXECUTOR, "1", "2");
new AsyncCatSlider().executeOnExecutor(AsyncTask.THREA D_POOL_EXECUTOR, "1", "3");
return view;
}
}

spiderman200700
جمعه 26 خرداد 1396, 12:47 عصر
منظور من این کد ها نبود.
شما گفتید بعضی وقتا داده لود نمیشه. باید کد لود داده رو میزاشتید.
اینا که ربطی ندارن

JYasProgramer
جمعه 26 خرداد 1396, 15:03 عصر
کلاس آسینک تسکی که داده رو دریافت میکنم:

private class AsyncAds extends AsyncTask<Void, Void, List<JSONObject>> {

public AsyncAds() {
}

@Override
protected void onPreExecute() {
super.onPreExecute();
progressBar.setVisibility(View.VISIBLE);
}

@Override
protected List<JSONObject> doInBackground(Void... params) {
List<JSONObject> lstSlUrl = new ArrayList<JSONObject>();
List<NameValuePair> sendingParams = new ArrayList<NameValuePair>();
sendingParams.add(new BasicNameValuePair("userID", String.valueOf(prefManager.getUserID())));
sendingParams.add(new BasicNameValuePair("catID", String.valueOf(catID)));
sendingParams.add(new BasicNameValuePair("sexType", String.valueOf(prefManager.getUserSex())));
JSONObject json = jParser.makeHttpRequest(urlAds, "POST", sendingParams);
try {
boolean success = json.getBoolean("error");
if (!success) {
JSONArray slUrl = json.getJSONArray("imgs");
lst.clear();
for (int i = 0; i < slUrl.length(); i++) {
JSONObject jObject = slUrl.getJSONObject(i);
dlGallery dlG1 = new dlGallery();
try {
dlG1.id = Integer.valueOf(jObject.getString("id"));
dlG1.desc = jObject.getString("name");
dlG1.imageUrl = jObject.getString("img_url");
dlG1.visit = jObject.getString("visitor_count");
dlG1.rating = jObject.getString("rate");
dlG1.time_viewer = jObject.getInt("time_viewer");
dlG1.view_state = jObject.getInt("view_state");
dlG1.coins = jObject.getInt("stock");
dlG1.is_telegram_ad = jObject.getInt("is_telegram_ad");
dlG1.addr_telegram = jObject.getString("addr_telegram");
lst.add(dlG1);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}

return lstSlUrl;
}

@Override
protected void onPostExecute(List<JSONObject> slUrl) {
super.onPostExecute(slUrl);

progressBar.setVisibility(View.GONE);
if (lst.size() == 0) {
noExistView.setVisibility(View.VISIBLE);
adGl1.setVisibility(View.GONE);
adGl2.setVisibility(View.GONE);
adGl3.setVisibility(View.GONE);
adGl4.setVisibility(View.GONE);
adGl5.setVisibility(View.GONE);
adGl6.setVisibility(View.GONE);
adGl7.setVisibility(View.GONE);
sep2.setVisibility(View.GONE);
sep3.setVisibility(View.GONE);
sep4.setVisibility(View.GONE);
sep5.setVisibility(View.GONE);
mSlider1.setVisibility(View.GONE);
mSlider2.setVisibility(View.GONE);
} else if (lst.size() > 0 && lst.size() <= 10) {
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(0, lst.size())), sSize.getScreenSize()[0], iglayoutParams.height);
adGl1.setAdapter(adapter);
adGl2.setVisibility(View.GONE);
adGl3.setVisibility(View.GONE);
adGl4.setVisibility(View.GONE);
adGl5.setVisibility(View.GONE);
adGl6.setVisibility(View.GONE);
adGl7.setVisibility(View.GONE);
sep2.setVisibility(View.GONE);
sep3.setVisibility(View.GONE);
sep4.setVisibility(View.GONE);
sep5.setVisibility(View.GONE);
mSlider1.setVisibility(View.GONE);
mSlider2.setVisibility(View.GONE);
} else if (lst.size() > 10 && lst.size() <= 20) {
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(0, 10)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl1.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(10, lst.size())), sSize.getScreenSize()[0], iglayoutParams.height);
adGl2.setAdapter(adapter);
adGl3.setVisibility(View.GONE);
adGl4.setVisibility(View.GONE);
adGl5.setVisibility(View.GONE);
adGl6.setVisibility(View.GONE);
adGl7.setVisibility(View.GONE);
sep4.setVisibility(View.GONE);
sep5.setVisibility(View.GONE);
mSlider2.setVisibility(View.GONE);
} else if (lst.size() > 20 && lst.size() <= 30) {
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(0, 10)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl1.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(10, 20)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl2.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(20, lst.size())), sSize.getScreenSize()[0], iglayoutParams.height);
adGl3.setAdapter(adapter);
adGl4.setVisibility(View.GONE);
adGl5.setVisibility(View.GONE);
adGl6.setVisibility(View.GONE);
adGl7.setVisibility(View.GONE);
sep4.setVisibility(View.GONE);
sep5.setVisibility(View.GONE);
mSlider2.setVisibility(View.GONE);
} else if (lst.size() > 30 && lst.size() <= 40) {
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(0, 10)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl1.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(10, 20)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl2.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(20, 30)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl3.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(30, lst.size())), sSize.getScreenSize()[0], iglayoutParams.height);
adGl4.setAdapter(adapter);
adGl5.setVisibility(View.GONE);
adGl6.setVisibility(View.GONE);
adGl7.setVisibility(View.GONE);
sep4.setVisibility(View.GONE);
sep5.setVisibility(View.GONE);
mSlider2.setVisibility(View.GONE);
} else if (lst.size() > 40 && lst.size() <= 50) {
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(0, 10)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl1.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(10, 20)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl2.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(20, 30)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl3.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(30, 40)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl4.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(40, lst.size())), sSize.getScreenSize()[0], iglayoutParams.height);
adGl5.setAdapter(adapter);
adGl6.setVisibility(View.GONE);
adGl7.setVisibility(View.GONE);
} else if (lst.size() > 50 && lst.size() <=60) {
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(0, 10)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl1.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(10, 20)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl2.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(20, 30)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl3.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(30, 40)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl4.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(40, 50)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl5.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(60, lst.size())), sSize.getScreenSize()[0], iglayoutParams.height);
adGl6.setAdapter(adapter);
adGl7.setVisibility(View.GONE);
} else if (lst.size() >= 60) {
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(0, 10)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl1.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(10, 20)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl2.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(20, 30)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl3.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(30, 40)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl4.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(40, 50)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl5.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(50, 60)), sSize.getScreenSize()[0], iglayoutParams.height);
adGl6.setAdapter(adapter);
adapter = new AdPropertyAdapter(getActivity(), new ArrayList<>(lst.subList(60, lst.size())), sSize.getScreenSize()[0], iglayoutParams.height);
adGl7.setAdapter(adapter);
}
}
}


کلاس jsonparser

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) {

// Making HTTP request
try {

// check for request method
if(method == "POST"){
// request method is POST
// defaultHttpClient

HttpParams my_httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(my_httpP arams, 10000);
HttpConnectionParams.setSoTimeout(my_httpParams, 10000);
DefaultHttpClient httpClient = new DefaultHttpClient(my_httpParams);
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
httpPost.setHeader("Accept", "application/json");
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();

}else if(method == "GET"){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);

HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
json = "timeout";
}

try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}

// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}

// return JSON String
return jObj;

}
}


آیا اینکه در یک کلاس دو یا سه آسینک تسک رو پشت سر هم فراخونی کنم مشکلی ایجاد میکنه؟