ورود

View Full Version : مشکل در خواندن اطلاعات از سرور



sd.CSharpProgrammer
شنبه 19 تیر 1395, 15:39 عصر
سلام دوستان
من یه فایل دارم رو سرور به اسم product.php که id می گیره و مشخصات محصول رو از دیتابیس می خونه و خروجی json تحویل میده. وقتی این فایل رو دستی تو مرورگر تایپ می کنم خروجی مورد نظر به درستی داده میشه ولی وقتی از طریق برنامه اندرویدی اقدام می کنم مقدار null پس میده.

برای خوندن اطلاعات از کلاس AsyncWorker استفاده کردم:


private class GetProductAsyncWorker extends AsyncTask<Void, Void, Void> {
View view;
Activity context;
String productId;
ProductModel model;
RelativeLayout mainWaitingLayout;
RelativeLayout mainProductDetailsLayout;


public GetProductAsyncWorker(Activity context, View view, String productId) {
this.context = context;
this.view = view;
this.productId = productId;
mainWaitingLayout = (RelativeLayout) view.findViewById(R.id.mainWaitingLayout);
mainProductDetailsLayout = (RelativeLayout) view.findViewById(R.id.mainProductDetailsLayout);
}


@Override
protected void onPreExecute() {
mainWaitingLayout.bringToFront();
mainWaitingLayout.setVisibility(View.VISIBLE);
}


@Override
protected Void doInBackground(Void... params) {
String fetchUrl = "http://mydomain.ir/app/android/products.php?pid=" + productId;
InputStream jsonStream = getStreamFromURL(fetchUrl, "GET");
String jsonString = streamToString(jsonStream);


try {
model = parseProductJSON(jsonString, productId);
} catch (org.json.JSONException e) { }


return null;
}


@Override
protected void onPostExecute(Void aVoid) {
((TextView) view.findViewById(R.id.mainProductDetailsPersianNa meTextView)).setText(model.getProductPersianName() );
((TextView) view.findViewById(R.id.mainProductDetailsFinglishN ameTextView)).setText(model.getProductFinglishName ());
((TextView) view.findViewById(R.id.mainProductDetailsPriceText View)).setText(getPriceWithDelimiter(model.getProd uctPrice()) + " تومان");
setProductRate((ImageView) view.findViewById(R.id.mainProductDetailsRateImage View), model.getProductRate());


String tarkibat = model.getProductInfoModel().getTarkibat();
String joziyat = model.getProductInfoModel().getJoziyat();
String taem = model.getProductInfoModel().getTaem();
String nokateMohem = model.getProductInfoModel().getNokateMohem();
String nazareKarshenas = model.getProductInfoModel().getNazareKarshenas();


((TextView) view.findViewById(R.id.mainProductDetailsTab1Descr iptionTextView)).setText("<b>ترکیبات محصول: </b><small>" + tarkibat + "</small><br /><br /><b>جزئیات محصول: </b><small>" + joziyat + "</small><br /><br /><b>طعم: </b><small>" + taem + "</small><br /><br /><b>نکات مهم: </b><small>" + nokateMohem + "</small><br /><br /><b>نظر کارشناس: </b><small>" + nazareKarshenas + "</small>");


fillComments(view, (LinearLayout) view.findViewById(R.id.mainProductDetailsTab2Layou tInnerContainer), model.getCommentModelList());


cancel(true);
}
}



این هم از متد parseProductJSON:

private ProductModel parseProductJSON(String JSONString, String productId) throws JSONException {
ProductModel model = new ProductModel();


JSONArray json = new JSONArray(JSONString);
JSONArray rootJsonArray = json.getJSONArray(0);


model.setId(productId);
model.setProductPersianName(String.valueOf(rootJso nArray.get(0)));
model.setProductFinglishName(String.valueOf(rootJs onArray.get(1)));
model.setProductPrice(String.valueOf(rootJsonArray .get(2)));
model.setProductRate(Integer.parseInt(String.value Of(rootJsonArray.get(3))));


JSONArray productInfoJsonArray = rootJsonArray.getJSONArray(0);
ProductInfoModel infoModel = new ProductInfoModel();
infoModel.setTarkibat(String.valueOf(productInfoJs onArray.get(0)));
infoModel.setJoziyat(String.valueOf(productInfoJso nArray.get(1)));
infoModel.setTaem(String.valueOf(productInfoJsonAr ray.get(2)));
infoModel.setNokateMohem(String.valueOf(productInf oJsonArray.get(3)));
infoModel.setNazareKarshenas(String.valueOf(produc tInfoJsonArray.get(4)));
model.setProductInfoModel(infoModel);


JSONArray productCommentsJsonArray = rootJsonArray.getJSONArray(1);
List<CommentModel> productCommentModels = new ArrayList<>();
for (int index = 0; index < productCommentsJsonArray.length(); index++) {
JSONArray e = productCommentsJsonArray.getJSONArray(index);


String username = String.valueOf(productCommentsJsonArray.get(0));
String comment = String.valueOf(productCommentsJsonArray.get(1));
int rate = Integer.parseInt(String.valueOf(productCommentsJso nArray.get(2)));


productCommentModels.add(new CommentModel(username, comment, rate));
}
model.setCommentModelList(productCommentModels);


JSONArray relatedProductsJsonArray = rootJsonArray.getJSONArray(2);
List<ProductModel> relatedProductModels = new ArrayList<>();
for (int index = 0; index < relatedProductsJsonArray.length(); index++) {
JSONArray e = relatedProductsJsonArray.getJSONArray(index);
ProductModel relatedProductModel = new ProductModel();


relatedProductModel.setId(String.valueOf(e.get(0)) );
relatedProductModel.setProductPersianName(String.v alueOf(e.get(1)).split(Pattern.quote("|"))[0].trim());
relatedProductModel.setProductFinglishName(String. valueOf(e.get(1)).split(Pattern.quote("|"))[1].trim());
relatedProductModel.setProductPrice(String.valueOf (e.get(2)));
relatedProductModel.setProductImageUrl(String.valu eOf(e.get(3)));


relatedProductModels.add(relatedProductModel);
}
model.setRelatedProductsList(relatedProductModels) ;


return model;
}



و به این شکل استفاده می کنم:

new GetProductAsyncWorker(getActivity(), fragView, String.valueOf(view.getTag())).execute();

خروجی این کدها مقدار null هست!
مشکل از کجاست دوستان؟ لطفاً راهنمایی کنید مرسی

spiderman200700
شنبه 19 تیر 1395, 17:51 عصر
خروجی null واسه کدوم متد هست؟

sd.CSharpProgrammer
شنبه 19 تیر 1395, 23:27 عصر
خروجی null واسه کدوم متد هست؟
واسه متد parseProductJSON :افسرده:

sd.CSharpProgrammer
یک شنبه 20 تیر 1395, 10:01 صبح
کسی نیست کمک کنه؟ :ناراحت:

spiderman200700
یک شنبه 20 تیر 1395, 16:08 عصر
احتمالا توی متد parseProductJSON ، یک JSONException داری.
چک کن ببین json ی که داری parse می کنی همه اطلاعاتی که توی کد ازش میخوای بگیری رو داشته باشه. یا سایز productCommentsJsonArray کمتر از 3 نباشه(با توجه به این حط 22).

sd.CSharpProgrammer
چهارشنبه 23 تیر 1395, 08:59 صبح
احتمالا توی متد parseProductJSON ، یک JSONException داری.
چک کن ببین json ی که داری parse می کنی همه اطلاعاتی که توی کد ازش میخوای بگیری رو داشته باشه. یا سایز productCommentsJsonArray کمتر از 3 نباشه(با توجه به این حط 22).

مشکل از json نیست چون همون لینک رو تو مرورگز می زنم اطلاعات رو به درستی از دیتابیس می خونه و خروجی json تحویل میده :ناراحت: