There is a link: http://ufa.farfor.ru/getyml/?key=ukAXxeJYZN , you need to load the data and display it in the list. I tried XmlPullParser and Jsoup, it does not work, as if an empty file comes in response. What method can this be done?
Here is the code:
Main public class MainActivity extends AppCompatActivity {
private final static String url = "http://ufa.farfor.ru/getyml/?key=ukAXxeJYZN"; ListView mListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new MenuParsTask(this, url).execute(); mListView = (ListView) findViewById(R.id.lv_list); com.tolik23gmail.farfor.ListAdapter listAdapter = new com.tolik23gmail.farfor.ListAdapter(this,MenuParsTask.list); mListView.setAdapter(listAdapter); } }
Parser
public class MenuParsTask extends AsyncTask<ArrayList<String>, Void, ArrayList<String>> { public MainActivity activity; private String url; private XmlPullParserFactory xmlFactoryObject; private ProgressDialog pDialog; public static ArrayList<String> list = new ArrayList<String>(); public static Map<String, String> map = new HashMap<String, String>(); public MenuParsTask(MainActivity activity, String url) { this.activity = activity; this.url = url; } @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(activity); pDialog.setTitle("Пожалуйста подождите."); pDialog.setMessage("Загрузка меню..."); pDialog.show(); } @Override protected ArrayList<String> doInBackground(ArrayList<String>... params) { try { URL url = new URL(this.url); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setReadTimeout(10000 /* milliseconds */); connection.setConnectTimeout(15000 /* milliseconds */); connection.setRequestMethod("GET"); connection.setDoInput(true); connection.connect(); InputStream stream = connection.getInputStream(); xmlFactoryObject = XmlPullParserFactory.newInstance(); XmlPullParser parser = xmlFactoryObject.newPullParser(); parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); parser.setInput(stream, null); ArrayList<String> list = (ArrayList<String>) parseXML(parser); stream.close(); return list; } catch (Exception e) { e.printStackTrace(); return null; } } public ArrayList<String> parseXML(XmlPullParser parser) { try { while (parser.getEventType() != XmlPullParser.END_DOCUMENT) { if (parser.getEventType() == XmlPullParser.START_TAG && parser.getName().equals("category")) { String id = parser.getAttributeValue(0); list.add(id); } parser.next(); } } catch (Exception e) { e.printStackTrace(); } return list; } @Override protected void onPostExecute(ArrayList<String> list) { super.onPostExecute(list); pDialog.dismiss(); } }
Adapter
import java.util.List;
/ ** * Created by MaZ on 07/27/2016. * / public class ListAdapter extends BaseAdapter {
private Context mContext; private LayoutInflater mLayoutInflater; private List<String> mList; public ListAdapter(Context context,List<String> list){ this.mContext=context; this.mList=list; mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } static class ViewHolder { TextView tv_text; } @Override public int getCount() { return mList == null ? 0 : mList.size(); } @Override public Object getItem(int position) { if(mList==null){ return null; } return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { Log.d("ListAdapter", "getView() position =" + position); ViewHolder viewHolder; if (convertView == null){ LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item_main, parent, false); viewHolder = new ViewHolder(); viewHolder.tv_text = (TextView) convertView.findViewById(R.id.tv_text); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tv_text.setText(mList.get(position)); return convertView; } }
It seems like HttpURLConnection loads an empty file, because I tried to output it to a log
public class ParsTask extends AsyncTask<String, Void, String> { public MainActivity activity; private String url; private String text; final String LOG_TAG = "myLogs"; private ProgressDialog pDialog; public ParsTask(MainActivity activity, String url) { this.activity = activity; this.url = url; } @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(activity); pDialog.setTitle("......."); pDialog.setMessage("Загрузка..."); pDialog.show(); } @Override protected String doInBackground(String... params) { String cont; try{ cont = getContent(url); } catch (IOException ex){ cont = ex.getMessage(); } return cont; } private String getContent(String path) throws IOException { String res = ""; try { URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setDoOutput(true); InputStream content = connection.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(content)); String line; while ((line = in.readLine()) != null) { res += line + "\n"; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return res; } @Override protected void onProgressUpdate(Void... items) { } @Override protected void onPostExecute(String cont) { super.onPostExecute(cont); pDialog.dismiss(); Log.d(LOG_TAG,"text=" + cont); } }
slightly corrected in the output, it turned out like this. Displays nothing at all on the link, but this
D/myLogs: text=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html lang="ru" class="page no-js"><head> <meta charset="utf-8"/> <title>Фарфор</title> <meta name="description" content=""> <meta name="Keywords" content=""> <meta name="description" content="Закажите доставку суши за 1 час на дом и в офис по Уфе. Если мы не успеем доставить - подарим сет!"> <meta name="keywords" content="доставка суши Уфа заказ заказать фарфор быстро ресторан доставки дом офис"> <meta content="telephone=no" name="format-detection"/> <meta name="robots" content="noodp, noydir"/> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/> <meta content="IE=edge" http-equiv="X-UA-Compatible"/><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(t,e,n){function r(n){if(!e[n]){var o=e[n]={exports:{}};t[n][0].call(o.exports,function(e){var o=t[n][1][e];return r(o||e)},o,o.exports)}return e[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({1:[function(t,e,n){function r(){}function o(t,e,n){return function(){return i(t,[(new Date).getTime()].concat(u(arguments)),e?null:this,n),e?void 0:this}}var i=t("handle"),a=t(2),u=t(3),c=t("ee").get("tracer"),f=NREUM;"undefined"==typeof window.newrelic&&(newrelic=f);var s=["setPageViewName","setCustomAttribute","finished","addToTrace","inlineHit"],p="api-",l=p+"ixn-";a(s,function(t,e){f[e]=o(p+e,!0,"api")}),f.addPageAction=o(p+"addPageAction",!0),e.exports=newrelic,f.interaction=function(){return(new r).get()};var d=r.prototype={createTracer:function(t,e){var n={},r=this,o="function"==typeof e;return i(l+"tracer",[Date.now(),t,n],r),function(){if(c.emit((o?"":"no-")+"fn-start",[Date.now(),r,o],n),o)try{return e.apply(this,arguments)}finally{c.emit("fn-end",[Date.now()],n)}}}};a("setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),function(t,e){d[e]=o(l+e)}),newrelic.noticeError=function(t){"string"==typeof t&&(t=new Error(t)),i("err",[t,(new Date).getTime()])}},{}],2:[function(t,e,n){function r(t,e){var n=[],r="",i=0;for(r in t)o.call(t,r)&&(n[i]=e(r,t[r]),i+=1);return n}var o=Object.prototype.hasOwnProperty;e.exports=r},{}],3:[function(t,e,n){function r(t,e,n){e||(e=0),"undefined"==typeof n&&(n=t?t.length:0);for(var r=-1,o=ne||0,i=Array(o<0?0:o);++r<o;)i[r]=t[e+r];return i}e.exports=r},{}],ee:[function(t,e,n){function r(){}function o(t){function e(t){return t&&t instanceof r?t:t?u(t,a,i):i()}function n(n,r,o){t&&t(n,r,o);for(var i=e(o),a=l(n),u=a.length,c=0;c<u;c++)a[c].apply(i,r);var s=f[m[n]];return s&&s.push([w,n,r,i]),i}function p(t,e){g[t]=l(t).concat(e)}function l(t){return g[t]||[]}function d(t){return s[t]=s[t]||o(n)}function v(t,e){c(t,function(t,n){e=e||"feature",m[n]=e,e in f||(f[e]=[])})}var g={},m={},w={on:p,emit:n,get:d,listeners:l,context:e,buffer:v};return w}function i(){return new r}var a="nr@context",u=t("gos"),c=t(2),f={},s={},p=e.exports=o();p.backlog=f},{}],gos:[function(t,e,n){function r(t,e,n){if(o.call(t,e))return t[e];var r=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(t,e,{value:r,writable:!0,enumerable:!1}),r}catch(i){}return t[e]=r,r}var o=Object.prototype.hasOwnProperty;e.exports=r},{}],handle:[function(t,e,n){function r(t,e,n,r){o.buffer([t],r),o.emit(t,e,n)}var o=t("ee").get("handle");e.exports=r,r.ee=o},{}],id:[function(t,e,n){function r(t){var e=typeof t;return!t||"object"!==e&&"function"!==e?-1:t===window?0:a(t,i,function(){return o++})}var o=1,i="nr@id",a=t("gos");e.exports=r},{}],loader:[function(t,e,n){function r(){if(!h++){var t=y.info=NREUM.info,e=s.getElementsByTagName("script")[0];if(t&&t.licenseKey&&t.applicationID&&e){c(m,function(e,n){t[e]||(t[e]=n)});var n="https"===g.split(":")[0]||t.sslForHttp;y.proto=n?"https://":"http://" mistake
07-28 11:08:25.645 7698-9303/com.tolik23gmail.parserz W/System.err: java.io.FileNotFoundException: http://ufa.farfor.ru/getyml/?key=ukAXxeJYZN 07-28 11:08:25.665 7698-7698/com.tolik23gmail.parserz E/Adreno200-ES20: <qgl2DrvAPI_glUseProgram:1318>: **** 7698: glUseProgram(6) 07-28 11:08:25.665 7698-7698/com.tolik23gmail.parserz E/Adreno200-ES20: <qgl2DrvAPI_glUseProgram:1318>: **** 7698: glUseProgram(3) 07-28 11:08:25.665 7698-9303/com.tolik23gmail.parserz W/System.err: at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177) 07-28 11:08:25.665 7698-9303/com.tolik23gmail.parserz W/System.err: at com.tolik23gmail.parserz.ParsTask.getContent(ParsTask.java:125) 07-28 11:08:25.665 7698-9303/com.tolik23gmail.parserz W/System.err: at com.tolik23gmail.parserz.ParsTask.doInBackground(ParsTask.java:55) 07-28 11:08:25.665 7698-9303/com.tolik23gmail.parserz W/System.err: at com.tolik23gmail.parserz.ParsTask.doInBackground(ParsTask.java:25) 07-28 11:08:25.665 7698-9303/com.tolik23gmail.parserz W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:264) 07-28 11:08:25.665 7698-9303/com.tolik23gmail.parserz W/System.err: at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 07-28 11:08:25.665 7698-9303/com.tolik23gmail.parserz W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:137) 07-28 11:08:25.665 7698-9303/com.tolik23gmail.parserz W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 07-28 11:08:25.675 7698-9303/com.tolik23gmail.parserz W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 07-28 11:08:25.675 7698-9303/com.tolik23gmail.parserz W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 07-28 11:08:25.675 7698-9303/com.tolik23gmail.parserz W/System.err: at java.lang.Thread.run(Thread.java:856) 07-28 11:08:25.675 7698-7698/com.tolik23gmail.parserz D/myLogs: text=