android - App force close without internet JSON -


im making app using json on first activity when app open without internet conection app make "force close", dont know have ovoid error, help, im new on android , java

public class mainactivity extends actionbaractivity {

string titles[] = {"que es cmx","ejecutivos(as)","nuestros servicios","soluciones tu medida","certificaciones vigentes", "cursos online", "", "", "", ""};  int icons[] = {r.mipmap.organization,r.mipmap.conference,r.mipmap.services,r.mipmap.approval,r.mipmap.diploma1,r.mipmap.donate,r.id.linea,r.id.linea,r.id.linea,r.mipmap.home};  string name = "john doe"; string email = "johndoe@cmx.org.mx"; int profile = r.drawable.profile1;  private toolbar toolbar;                              // declaring toolbar object  recyclerview mrecyclerview;                           // declaring recyclerview recyclerview.adapter madapter;                        // declaring adapter recycler view recyclerview.layoutmanager mlayoutmanager;            // declaring layout manager linear layout manager drawerlayout drawer;                                  // declaring drawerlayout  actionbardrawertoggle mdrawertoggle;                  // declaring action bar drawer toggle // declare variables jsonobject jsonobject; jsonarray jsonarray; listview listview; listviewadapter adapter; progressdialog mprogressdialog; arraylist<hashmap<string, string>> arraylist; static string rank = "title"; static string country = "place"; static string population = "date"; static string content1 = "content1"; static string content2 = "content2"; static string flag = "imagen";  @override public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     // view listview_main.xml     setcontentview(r.layout.listview_main);     // execute downloadjson asynctask     new downloadjson().execute();      toolbar = (toolbar) findviewbyid(r.id.tool_bar);     setsupportactionbar(toolbar);      settitle(r.string.title_activity_main);        mrecyclerview = (recyclerview) findviewbyid(r.id.recyclerview); // assigning recyclerview object xml view      mrecyclerview.sethasfixedsize(true);                            // letting system know list objects of fixed size      madapter = new myadapter(titles,icons,name,email,profile,this);       // creating adapter of myadapter class(which going see in bit)     // , passing titles,icons,header view name, header view email,     // , header view profile picture      mrecyclerview.setadapter(madapter);                              // setting adapter recyclerview      final gesturedetector mgesturedetector = new gesturedetector(mainactivity.this, new gesturedetector.simpleongesturelistener() {          @override public boolean onsingletapup(motionevent e) {             return true;         }      });       mrecyclerview.addonitemtouchlistener(new recyclerview.onitemtouchlistener() {         @override         public boolean onintercepttouchevent(recyclerview recyclerview, motionevent motionevent) {             view child = recyclerview.findchildviewunder(motionevent.getx(),motionevent.gety());                if(child !=null && mgesturedetector.ontouchevent(motionevent)){                 drawer.closedrawers();                  if (recyclerview.getchildposition(child) == 0) {                     intent intent = new intent(mainactivity.this, profile.class);                     startactivity(intent);                     finish();                 }else if                         (recyclerview.getchildposition(child) == 1) {                     intent intent = new intent(mainactivity.this, cmx.class);                     startactivity(intent);                     finish();                 }else if                         (recyclerview.getchildposition(child) == 2) {                     intent intent = new intent(mainactivity.this, ejecutivos.class);                     startactivity(intent);                     finish();                 }else if                         (recyclerview.getchildposition(child) == 3){                     intent intent = new intent(mainactivity.this, servicios.class);                     startactivity(intent);                     finish();                 }else if                         (recyclerview.getchildposition(child) == 4){                     intent intent = new intent(mainactivity.this, soluciones.class);                     startactivity(intent);                     finish();                 }else if                         (recyclerview.getchildposition(child) == 5) {                     intent intent = new intent(mainactivity.this, certificaciones.class);                     startactivity(intent);                     finish();                 }else if                         (recyclerview.getchildposition(child) == 6){                     intent intent = new intent(mainactivity.this, web.class);                     startactivity(intent);                     finish();                 }else if                         (recyclerview.getchildposition(child) == 8 ){                     intent intent = new intent(mainactivity.this, mainactivity.class);                     startactivity(intent);                     finish();                 }                  return true;              }              return false;         }          @override         public void ontouchevent(recyclerview recyclerview, motionevent motionevent) {          }     });       mlayoutmanager = new linearlayoutmanager(this);                 // creating layout manager      mrecyclerview.setlayoutmanager(mlayoutmanager);                 // setting layout manager       drawer = (drawerlayout) findviewbyid(r.id.drawerlayout);        // drawer object assigned view     mdrawertoggle = new actionbardrawertoggle(this,drawer,toolbar,r.string.opendrawer,r.string.closedrawer){          @override         public void ondraweropened(view drawerview) {             super.ondraweropened(drawerview);             // code here execute once drawer opened( dont want happened whe drawer             // open not going put here)         }          @override         public void ondrawerclosed(view drawerview) {             super.ondrawerclosed(drawerview);             // code here execute once drawer closed         }        }; // drawer toggle object made     drawer.setdrawerlistener(mdrawertoggle); // drawer listener set drawer toggle     mdrawertoggle.syncstate();               // set drawer toggle sync state }  // downloadjson asynctask private class downloadjson extends asynctask<void, void, void> {      @override     protected void onpreexecute() {         super.onpreexecute();         // create progressdialog         mprogressdialog = new progressdialog(mainactivity.this);         // set progressdialog message         mprogressdialog.setmessage("cargando...");         mprogressdialog.setindeterminate(false);         // show progressdialog         mprogressdialog.show();     }       @override     protected void doinbackground(void... params) {         // create array         arraylist = new arraylist<hashmap<string, string>>();         // retrieve json objects given url address         jsonobject = jsonfunctions.getjsonfromurl("http://cmx.org.mx/wp-content/uploads/json.txt");          try {             // locate array name in json             jsonarray = jsonobject.getjsonarray("posts");              (int = 0; < jsonarray.length(); i++) {                 hashmap<string, string> map = new hashmap<string, string>();                 jsonobject = jsonarray.getjsonobject(i);                 // retrive json objects                 map.put("title", jsonobject.getstring("title"));                 map.put("place", jsonobject.getstring("place"));                 map.put("date", jsonobject.getstring("date"));                 map.put("content1", jsonobject.getstring("content1"));                 map.put("content2", jsonobject.getstring("content2"));                 map.put("imagen", jsonobject.getstring("imagen"));                 // set json objects array                 arraylist.add(map);             }         } catch (jsonexception e) {             log.e("error", e.getmessage());             e.printstacktrace();         }         return null;     }      @override     protected void onpostexecute(void args) {         // locate listview in listview_main.xml         listview = (listview) findviewbyid(r.id.listview);         // pass results listviewadapter.java         adapter = new listviewadapter(mainactivity.this, arraylist);         // set adapter listview         listview.setadapter(adapter);         // close progressdialog         mprogressdialog.dismiss();     } }  @override public boolean oncreateoptionsmenu(menu menu) {     // inflate menu; adds items action bar if present.     getmenuinflater().inflate(r.menu.menu_main, menu);     return true; }  public boolean onoptionsitemselected(menuitem item) {     // handle action bar item clicks here. action bar     // automatically handle clicks on home/up button, long     // specify parent activity in androidmanifest.xml.     int id = item.getitemid();      //noinspection simplifiableifstatement     if (id == r.id.action_settings) {         return true;     }      if (mdrawertoggle.onoptionsitemselected(item)) {         return true;     }      switch (item.getitemid()) {         // respond action bar's up/home button         case r.id.about:              intent intent = new intent(mainactivity.this, about.class);             startactivity(intent);              return true;     }     return super.onoptionsitemselected(item); } 

}

 public class jsonfunctions {      public static jsonobject getjsonfromurl(string url) {         inputstream = null;         string result = "";         jsonobject jarray = null;          // download json data url         try {             httpclient httpclient = new defaulthttpclient();             httppost httppost = new httppost(url);             httpresponse response = httpclient.execute(httppost);             httpentity entity = response.getentity();             = entity.getcontent();          } catch (exception e) {             log.e("log_tag", "error in http connection " + e.tostring());         }          // convert response string         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();             result = sb.tostring();         } catch (exception e) {             log.e("log_tag", "error converting result " + e.tostring());         }          try {              jarray = new jsonobject(result);         } catch (jsonexception e) {             log.e("log_tag", "error parsing data " + e.tostring());         }          return jarray;     } } 

-edit

logcat: https://goo.gl/n1yq9t

update1:

        @override     protected void doinbackground(void... params) {         // create array         arraylist = new arraylist<hashmap<string, string>>();         // retrieve json objects given url address         jsonobject = jsonfunctions.getjsonfromurl("http://cmx.org.mx/wp-content/uploads/json.txt");      if(jsonobject==null){         toast.maketext(getapplicationcontext(), "no internet", toast.length_long).show();     }else{          try {             // locate array name in json             jsonarray = jsonobject.getjsonarray("posts");              (int = 0; < jsonarray.length(); i++) {                 hashmap<string, string> map = new hashmap<string, string>();                 jsonobject = jsonarray.getjsonobject(i);                 // retrive json objects                 map.put("title", jsonobject.getstring("title"));                 map.put("place", jsonobject.getstring("place"));                 map.put("date", jsonobject.getstring("date"));                 map.put("content1", jsonobject.getstring("content1"));                 map.put("content2", jsonobject.getstring("content2"));                 map.put("imagen", jsonobject.getstring("imagen"));                 // set json objects array                 arraylist.add(map);             }         } catch (jsonexception e) {             log.e("error", e.getmessage());             e.printstacktrace();         }     }         return null;     } 

myadapter:

public class myadapter extends recyclerview.adapter<myadapter.viewholder> {  private static final int type_header = 0;  // declaring variable understand view being worked on // if view under inflation , population header or item private static final int type_item = 1;  private string mnavtitles[]; // string array store passed titles value mainactivity.java private int micons[];       // int array store passed icons resource value mainactivity.java  private string name;        //string resource header view name private int profile;        //int resource header view profile picture private string email;       //string resource header view email context context;   // creating viewholder extends recyclerview view holder // viewholder used to store inflated views in order recycle them  public static class viewholder extends recyclerview.viewholder implements view.onclicklistener {     int holderid;      textview textview;     imageview imageview;     imageview profile;     textview name;     textview email;     context contxt;       public viewholder(view itemview,int viewtype,context c) {                 // creating viewholder constructor view , viewtype parameter         super(itemview);         contxt = c;         itemview.setclickable(true);         itemview.setonclicklistener(this);           // here set appropriate view in accordance the view type passed when holder object created          if(viewtype == type_item) {             textview = (textview) itemview.findviewbyid(r.id.rowtext); // creating textview object id of textview item_row.xml             imageview = (imageview) itemview.findviewbyid(r.id.rowicon);// creating imageview object id of imageview item_row.xml             holderid = 1;                                               // setting holder id 1 object being populated of type item row         }         else{               name = (textview) itemview.findviewbyid(r.id.name);         // creating text view object header.xml name             email = (textview) itemview.findviewbyid(r.id.email);       // creating text view object header.xml email             profile = (imageview) itemview.findviewbyid(r.id.circleview);// creating image view object header.xml profile pic             holderid = 0;                                                // setting holder id = 0 object being populated of type header view         }     }      @override     public void onclick(view v) {          toast.maketext(contxt, "the item clicked is: " + getposition(), toast.length_short).show();      }      }    myadapter(string titles[],int icons[],string name,string email, int profile, context passedcontext){ // myadapter constructor titles , icons parameter     // titles, icons, name, email, profile pic passed main activity         mnavtitles = titles;                //have seen earlier     micons = icons;     name = name;     email = email;     profile = profile;     this.context = passedcontext;    //here assign passed values values declared here     //in adapter  }    //below first ovverride method oncreateviewholder called when viewholder //created, in method inflate item_row.xml layout if viewtype type_item or else inflate header.xml // if viewtype type_header // , pass view holder  @override public myadapter.viewholder oncreateviewholder(viewgroup parent, int viewtype) {      if (viewtype == type_item) {         view v = layoutinflater.from(parent.getcontext()).inflate(r.layout.item_row,parent,false); //inflating layout          viewholder vhitem = new viewholder(v,viewtype,context); //creating viewholder , passing object of type view          return vhitem; // returning created object          //inflate layout , pass view holder      } else if (viewtype == type_header) {          view v = layoutinflater.from(parent.getcontext()).inflate(r.layout.header,parent,false); //inflating layout          viewholder vhheader = new viewholder(v,viewtype,context); //creating viewholder , passing object of type view          return vhheader; //returning object created       }     return null;  }  //next override method called when item in row needed displayed, here int position // tells item @ position being constructed displayed , holder id of holder object tell // view type being created 1 item row @override public void onbindviewholder(myadapter.viewholder holder, int position) {     if(holder.holderid ==1) {                              // list view going called after header view decrement         // position 1 , pass holder while setting text , image         holder.textview.settext(mnavtitles[position - 1]); // setting text array of our titles         holder.imageview.setimageresource(micons[position -1]);// settimg image array of our icons     }     else{          holder.profile.setimageresource(profile);           // set resources header view         holder.name.settext(name);         holder.email.settext(email);     } }  // method returns number of items present in list @override public int getitemcount() {     return mnavtitles.length+1; // number of items in list +1 titles including header view. }   // witht following method check type of view being passed @override public int getitemviewtype(int position) {     if (ispositionheader(position))         return type_header;      return type_item; }  private boolean ispositionheader(int position) {     return position == 0; } 

your method getjsonfromurl() catches exceptions can think of, issue not there.

the issue returns null when exception has been caught.

so jsonobject null when have no internet, , you're accessing if it's not null @ jsonobject.getjsonarray("posts").

i suggest check if jsonobject == null after line jsonobject = jsonfunctions.getjsonfromurl(...);

edit (following comment):

the error due line of code in mainactivity. int icons[] = {r.mipmap.organization,r.mipmap.conference,r.mipmap.services,r.mipmap.approval,r.mipmap.diploma1,r.mipmap.donate,r.id.linea,r.id.linea,r.id.linea,r.mipmap.home};

all items in icons array should either r.mipmap.xxxx or r.drawable.xxxx, , not r.id.xxxx or others. see if issue, replace r.id.linea r.mipmap.conference testing purposes, , let know happens then.


Comments

Popular posts from this blog

Email notification in google apps script -

c++ - Difference between pre and post decrement in recursive function argument -

javascript - IE11 incompatibility with jQuery's 'readonly'? -