Android 切换页面时出现StringIndexOutOfBoundsException
当我从viewpager的片段(weekFragment)内部加载gridview(带有适配器weekAdapter)时,第一个页面加载良好。然而,一旦我想切换页面,它就会给出一个StringIndexOutOfBoundsException。我想不出是怎么回事。在LogCat中,没有报告任何内容,错误只显示我没有修改的本机方法。请告诉我如何解决这个问题 weekFragment.java:Android 切换页面时出现StringIndexOutOfBoundsException,android,android-fragments,android-gridview,android-viewpager,Android,Android Fragments,Android Gridview,Android Viewpager,当我从viewpager的片段(weekFragment)内部加载gridview(带有适配器weekAdapter)时,第一个页面加载良好。然而,一旦我想切换页面,它就会给出一个StringIndexOutOfBoundsException。我想不出是怎么回事。在LogCat中,没有报告任何内容,错误只显示我没有修改的本机方法。请告诉我如何解决这个问题 weekFragment.java: package nl.siebeh.schoolmate; import java.util.Arra
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 < 60; i++){
this.array[i] = String.valueOf(i);
}
ArrayList<ArrayList<Object>> result = new ArrayList<ArrayList<Object>>();
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 < result.size(); position++){
ArrayList<Object> 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 < 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 < 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);
}
}
错误:
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]
编辑:
我确定else if(title==“vakken”)是原因。如果它被注释掉了,它就工作了。顺序不重要,是这个子句导致了错误。今天晚些时候,我将尝试提出单独的假设 好的,我发现了我的问题。在这里:
}else if(title == "vakken"){
result = db.getAllRowsAsArrays("weekSubjects", null);
}
weekSubject应该是weekSubject(末尾没有s)Hi Swwizard!如何确定您的错误与StringIndexOutOfBoundsException有关?您可能应该
Log.d()
您的执行流来确定问题发生在源代码的哪一行。还要记录本机函数调用的参数值。您应该使用本机方法发布堆栈。这可能表明你以前做错了什么,并帮助他人帮助你。这不是你发布的完整stacktrace,对吗?@Laurent'在堆栈上方,上面写着StringIndexOutOfBoundsException。可能是StringArrayIndexOutOfBoundsException,现在无法检查。我会试试Log.d,你有关于如何使用它的链接吗?@Knickedi问题是这是完整的stacktrace!
}else if(title == "vakken"){
result = db.getAllRowsAsArrays("weekSubjects", null);
}