java - How to fetch data from net faster and display in listView? -


i have news app. app takes time fetch data server , display on listview.but have seen apps flipboard,facebook , game news has more data fetch mine faster.i think app loads entire data , displays entire list together.is there way display list such loads items in listview 1 one?i fetching using asynctaskloader in background.also how display large list of news 100 in list .

mainactivity:

package com.example.android.gametalks; import android.app.loadermanager; import android.content.intent; import android.content.loader; import android.net.uri; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.view; import android.widget.adapterview; import android.widget.listview;  import java.util.arraylist; import java.util.list;  public class mainactivity extends appcompatactivity implements loadermanager.loadercallbacks<list<gamenews>> {     //ign url     final string ign_url = "https://newsapi.org/v1/articles?source=ign&sortby=top&apikey=679f6fb918d34343b18590ca70f7fcde";    final string google_url = " https://newsapi.org/v1/articles?source=google-news&sortby=top&apikey=679f6fb918d34343b18590ca70f7fcde";     final string engadget_url = "https://newsapi.org/v1/articles?source=engadget&sortby=top&apikey=679f6fb918d34343b18590ca70f7fcde";      gameadapter adapter ;     private view progressbar;   final   private int game_loader = 0;     arraylist<string> urls = new arraylist<>();     @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);   urls.add(ign_url);        urls.add(google_url);        urls.add(engadget_url);         //getting listview         listview gamelistview = (listview) findviewbyid(r.id.listview);          //progress bar finding          progressbar = findviewbyid(r.id.progress_bar);  arraylist<gamenews> gamelist = new arraylist<>();            //making new arrayadapter          adapter = new gameadapter(this,gamelist);          //connecting arrayadapter listview         gamelistview.setadapter(adapter);          getloadermanager().initloader(game_loader, null, this);          //listview item click listner         gamelistview.setonitemclicklistener(new adapterview.onitemclicklistener() {             @override             public void onitemclick(adapterview<?> adapterview, view view, int i, long l) {                  gamenews currentearthquake = adapter.getitem(i);                 string url = currentearthquake.geturl();                 intent intent = new intent(intent.action_view);                 intent.setdata(uri.parse(url));                 startactivity(intent);               }         });     }      @override     public loader<list<gamenews>> oncreateloader(int i, bundle bundle) {          return new gameloader(this,urls);      }      @override     public void onloadfinished(loader<list<gamenews>> loader, list<gamenews> games) {         progressbar.setvisibility(view.invisible);        adapter.clear();          if(games == null)         {              return;         }                adapter.addall(games);      }      @override     public void onloaderreset(loader<list<gamenews>> loader) { adapter.clear();     } } 

gameloader:

package com.example.android.gametalks;  import android.content.asynctaskloader; import android.content.context;  import java.util.arraylist; import java.util.list;  /**  * created apple on 9/8/17.  */  public class gameloader extends asynctaskloader<list<gamenews>> {     private arraylist<string> urls = new arraylist<>();      public gameloader(context context, arraylist<string> url) {         super(context);         urls = url;      }      @override     protected void onstartloading()     {         forceload();     }      @override     public list<gamenews> loadinbackground() {           if(urls == null)         {             return null;         }         // perform http request earthquake data , process response.          list<gamenews> games = queryutils.fetchearthquakedata(urls);           return games;     }  } 

queryutils(here network fetching takes place):

package com.example.android.gametalks; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.util.log; import android.widget.listview;  import org.json.jsonarray; import org.json.jsonexception; import org.json.jsonobject;  import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstream; import java.io.inputstreamreader; import java.net.httpurlconnection; import java.net.malformedurlexception; import java.net.url; import java.nio.charset.charset; import java.text.simpledateformat; import java.util.arraylist; import java.util.date; import java.util.list;    /**  * helper methods related requesting , receiving earthquake data usgs.  */ public final class queryutils {      private static final string log_tag = queryutils.class.getsimplename();      /**      * create private constructor because no 1 should ever create {@link queryutils} object.      * class meant hold static variables , methods, can accessed      * directly class name queryutils (and object instance of queryutils not needed).      */     private queryutils() {     }      public static list<gamenews> fetchearthquakedata(arraylist<string> url) {         list<gamenews> games ;         list<gamenews> total = new arraylist<>();         url url;          log.d(log_tag,url.get(0));          for(int = 0 ; < url.size(); i++) {             url = createurl(url.get(i));                try {                 //make http request                 string jsonresponse = makehttprequest(url);                 games = extractfeaturefromjson(jsonresponse);    total.addall(games);             } catch (ioexception e) {                 log.e("ioexception", "" + e);             }         }      return total;     }      private static url createurl(string stringurl) {         url url = null;         try {             url = new url(stringurl);         } catch (malformedurlexception e) {             log.e(log_tag, "error creating url ", e);         }         return url;     }      private static string makehttprequest(url url) throws ioexception {         string jsonresponse = "";         inputstream inputstream = null;         httpurlconnection urlconnection = null;          try {             urlconnection = (httpurlconnection) url.openconnection();              if (urlconnection.getresponsecode() == 200) {                 inputstream = urlconnection.getinputstream();                 jsonresponse = readinputstream(inputstream);             } else {                 log.e(log_tag, "" + urlconnection.getresponsecode());                 return null;             }          } catch (ioexception e) {             log.d(log_tag, "" + e);         } {             if (urlconnection != null) {                 urlconnection.disconnect();             }             if (inputstream != null) {                 // function must handle java.io.ioexception here                 inputstream.close();             }         }          return jsonresponse;     }      private static string readinputstream(inputstream inputstream) throws ioexception {         stringbuilder output = new stringbuilder();         if (inputstream != null) {             inputstreamreader inputstreamreader = new inputstreamreader(inputstream, charset.forname("utf-8"));             bufferedreader reader = new bufferedreader(inputstreamreader);             string line = reader.readline();             while (line != null) {                 output.append(line);                 line = reader.readline();             }         }         return output.tostring();     }      private static arraylist<gamenews> extractfeaturefromjson(string jsonresponse) {         arraylist<gamenews> games = new arraylist<>();          try {               jsonobject jsonobject = new jsonobject(jsonresponse);             jsonarray articles = jsonobject.getjsonarray("articles");              (int = 0; < articles.length(); i++) {                 jsonobject currentgame = articles.getjsonobject(i);                    // extract value key called "mag"                 string title = currentgame.getstring("title");                  // extract value key called "place"                 string description = currentgame.getstring("description");                   // extract value key called "url"                 string url = currentgame.getstring("url");                   //extract value key called urltoimage                 string urltoimage = "nn";  urltoimage = currentgame.getstring("urltoimage");                  url urlofimage = null;                 bitmap bmp = null;                  try {                     urlofimage = new url(urltoimage);                 } catch (malformedurlexception e) {                     e.printstacktrace();                 }                  try {                      bmp = bitmapfactory.decodestream(urlofimage.openconnection().getinputstream());                 } catch (ioexception e) {                     e.printstacktrace();                 }                   // create new {@link earthquake} object magnitude, location, time,                 // , url json response.                 gamenews game = new gamenews(title, description,bmp,url);                  // add new {@link earthquake} list of earthquakes.                 games.add(game);                }         } catch (jsonexception e) {             log.d(log_tag, "" + e);         }          return games;     } } 

thanks in advance.


Comments

Popular posts from this blog

Sort a complex associative array in PHP -

vb.net - How to ignore if a cell is empty nothing -

recursion - Can every recursive algorithm be improved with dynamic programming? -