Note that there are some explanatory texts on larger screens.

plurals
  1. POStringIndexOutOfBoundsException when switching page
    primarykey
    data
    text
    <p>When I load a gridview (with adapter weekAdapter) from inside a fragment (weekFragment) for a viewpager, the first page loads fine. However, once I want to switch page, it gives a StringIndexOutOfBoundsException. I can't figure out what is wrong. In the LogCat nothing is reported, and the error only shows native methods, that I don't have modified. Please tell me how I can solve this.</p> <p>weekFragment.java:</p> <pre><code>package nl.siebeh.schoolmate; import java.util.ArrayList; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.GridView; public class weekFragment extends Fragment { dbLayer db; String[] array = new String[60]; public String title; View v; /*@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); GridView gridview = (GridView) v.findViewById(R.id.gridview); gridview.setAdapter(new weekAdapter(getActivity(), mContent)); }*/ public weekFragment newInstance(String title) { weekFragment fragment = new weekFragment(); fragment.title = title; return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } db = new dbLayer(getActivity()); for(int i = 0; i &lt; 60; i++){ this.array[i] = String.valueOf(i); } ArrayList&lt;ArrayList&lt;Object&gt;&gt; result = new ArrayList&lt;ArrayList&lt;Object&gt;&gt;(); if(title == "leraren"){ result = db.getAllRowsAsArrays("weekTeacher", null); }else if(title == "locatie"){ result = db.getAllRowsAsArrays("weekLocation", null); }else if(title == "vakken"){ result = db.getAllRowsAsArrays("weekSubjects", null); } Log.i("SchoolMate", "Size of result: "+String.valueOf(result.size())); for(int position = 0; position &lt; result.size(); position++){ ArrayList&lt;Object&gt; row = result.get(position); int hour = Integer.valueOf(row.get(1).toString()).intValue(); int day = Integer.valueOf(row.get(0).toString()).intValue(); int pos = 6 * hour + day; this.array[pos] = row.get(position).toString(); } this.array[2] = getResources().getStringArray(R.array.days)[0]; this.array[3] = getResources().getStringArray(R.array.days)[1]; this.array[4] = getResources().getStringArray(R.array.days)[2]; this.array[5] = getResources().getStringArray(R.array.days)[3]; this.array[6] = getResources().getStringArray(R.array.days)[4]; for(int i = 1; i &lt; 10; i++){ this.array[i] = Integer.toString(i); } v = inflater.inflate(R.layout.week_fragment, container, false); GridView gridview = (GridView) v.findViewById(R.id.gridview); if(getActivity() == null){ Log.i("SchoolMate", "getActivty() returns null"); } StringBuilder sb = new StringBuilder(); for(int i = 0; i &lt; 60; i++){ sb.append("array["+i+"] = \""+array[i]+"\" \n"); } Log.i("SchoolMate", sb.toString()); gridview.setAdapter(new weekAdapter(getActivity(), array)); return gridview; } @Override public boolean onContextItemSelected(MenuItem item) { return super.onContextItemSelected(item); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); } } </code></pre> <p>weekAdapter.java:</p> <pre><code>package nl.siebeh.schoolmate; import android.content.Context; import android.graphics.Color; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class weekAdapter extends BaseAdapter { public String[] strings; Context mContext; public weekAdapter(Context c, String[] s){ strings = s.clone(); mContext = c; Log.i("SchoolMate", "weekAdapter called"); } @Override public int getCount() { return 60; } @Override public Object getItem(int arg0) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView tv; //if (convertView == null) { // if it's not recycled, initialize some attributes tv = new TextView(mContext); try{ tv.setText(strings[position]); }catch(ArrayIndexOutOfBoundsException e){ Log.i("SchoolMate", "Out of bounds; position = "+String.valueOf(position)); } tv.setBackgroundColor(Color.BLACK); tv.setTextColor(Color.WHITE); /*} else { tv = (TextView) convertView; }*/ return tv; } } </code></pre> <p>The error:</p> <pre><code>ViewRoot.draw(boolean) line: 1546 ViewRoot.performTraversals() line: 1258 ViewRoot.handleMessage(Message) line: 1859 ViewRoot(Handler).dispatchMessage(Message) line: 99 Looper.loop() line: 123 ActivityThread.main(String[]) line: 3683 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] Method.invoke(Object, Object...) line: 507 ZygoteInit$MethodAndArgsCaller.run() line: 839 ZygoteInit.main(String[]) line: 597 NativeStart.main(String[]) line: not available [native method] </code></pre> <p>EDIT: I determined that the else if(title == "vakken") is the cause. If it is commented out, it just works. The order doesn't matter, it is this clause that causes the error. Later today I will try to make just seperate ifs. </p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload