Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 切换页面时出现StringIndexOutOfBoundsException_Android_Android Fragments_Android Gridview_Android Viewpager - Fatal编程技术网

Android 切换页面时出现StringIndexOutOfBoundsException

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

当我从viewpager的片段(weekFragment)内部加载gridview(带有适配器weekAdapter)时,第一个页面加载良好。然而,一旦我想切换页面,它就会给出一个StringIndexOutOfBoundsException。我想不出是怎么回事。在LogCat中,没有报告任何内容,错误只显示我没有修改的本机方法。请告诉我如何解决这个问题

weekFragment.java:

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); 
}