آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل در دریافت اطلاعات از RSS در برخی ورژن‌های اندروید

میلاد محمدی  6 سال پیش  6 سال پیش
0 0

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

@SuppressLint("StaticFieldLeak")
public class processInBackground extends AsyncTask<Integer, Void, Exception> {

Exception exception = null;

@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(SanjeshActivity.this);
if (getWindow().getDecorView().isShown()) {

progressDialog.setMessage("در حال دریافت اطلاعات...");
progressDialog.setCancelable(false);
progressDialog.show();

}
}

@Override
protected Exception doInBackground(Integer... integers) {
try{
URL url = new URL("http://www.sanjesh.org/rss/rss.aspx?id=1");
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(getInputStream(url),"UTF_8");
boolean insideItem = false;
int eventType = xpp.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT){
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equalsIgnoreCase("item")) {
insideItem = true;
} else if (xpp.getName().equalsIgnoreCase("title")) {
if (insideItem) {

//titles.add(xpp.nextText());
title = xpp.nextText();
}
} else if (xpp.getName().equalsIgnoreCase("pubDate")) {
info.add(new SanjeshlistInfo(title, xpp.nextText()));

} else if (xpp.getName().equalsIgnoreCase("link")) {
if (insideItem) {
links.add(xpp.nextText());
}
}
} else if (eventType == XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")) {
insideItem = false;
}

eventType = xpp.next();
}


} catch (MalformedURLException e){
exception = e;
} catch (XmlPullParserException e){
exception = e;
} catch (IOException e){
exception = e;
}



return exception;
}

@Override
protected void onPostExecute(Exception s) {
super.onPostExecute(s);
SanjeshRecyclerAdapter adapter = new SanjeshRecyclerAdapter(info);
lv_rss.setAdapter(adapter);
adapter.setOnItemClickListener(new SanjeshRecyclerAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position, Object data) {


String url = links.get(position);
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
builder.setToolbarColor(Color.parseColor("#4285F4"));
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(SanjeshActivity.this, Uri.parse(url));
}
});

if ( progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
}
}

}

وقتی وارد اکتیویتی میشم روی دستگاه خودم که اندروید ۷ هست بدون هیچ اشکالی اجرا میشه، اما روی اندروید های 4 و 4.4 و 9 و 10 که تست کردم فورس کلوز داد و توی لاگ این ارور رو داد:

 E: FATAL EXCEPTION: AsyncTask #2
Process: com.milad.unihi, PID: 11359
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:354)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.IllegalArgumentException: is == null
at org.kxml2.io.KXmlParser.setInput(KXmlParser.java:1636)
at com.milad.unihi.Activities.SanjeshActivity$processInBackground.doInBackground(SanjeshActivity.java:191)
at com.milad.unihi.Activities.SanjeshActivity$processInBackground.doInBackground(SanjeshActivity.java:166)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
at java.lang.Thread.run(Thread.java:764) 

خط های مربوطه که توی لاگ نوشته شده این‌ها هستند توی تابع بالا:

SanjeshActivity.java:191 :
xpp.setInput(getInputStream(url),"UTF_8");
SanjeshActivity.java:166 :
@SuppressLint("StaticFieldLeak") 

جستجو هم کردم و تغییراتی که توی سایت های مختلف گفته بودن رو توی کدم اعمال کردم اما به نتیجه‌ای نرسیدم. ممنون میشم راهنمایی کنید.

 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .