-1

viewpagerのフラグメント(weekFragment)内からgridview(adapterアダプタを使用)をロードすると、最初のページが正常に読み込まれます。ただし、一度ページを切り替えると、StringIndexOutOfBoundsExceptionが返されます。何が間違っているのか分かりません。 LogCatには何も報告されず、エラーはネイティブメソッドしか表示されませんが、私は変更していません。どうすれば解決できるか教えてください。StringIndexOutOfBoundsExceptionページ切り替え時

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



} 

weekAdapter.java:

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

} 

エラー:

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] 

はEDIT: (タイトル== "場合、私はそのほかの決定vakken ")が原因です。それがコメントアウトされていれば、うまく動作します。順序は重要ではありません。エラーを引き起こすのはこの句です。後日、私はちょうど別個のifsを作ろうとします。

+0

こんにちはSwwizardする必要があります!あなたのエラーがStringIndexOutOfBoundsExceptionに関連していることをどのように確かめることができますか?実行フローを 'Log.d()'して、ソースのどの行に問題が発生しているかを特定する必要があります。また、引数の値をNative関数呼び出しに記録します。 –

+0

スタックを*ネイティブ*メソッドでポストする必要があります。これはあなたが以前に間違ったことを示し、他の人があなたを助けるのを助けるかもしれません。これは投稿したスタックトレース全体ではありません。 – Knickedi

+0

@Laurent 'スタックの上にStringIndexOutOfBoundsExceptionがあります。たぶんStringArrayIndexOutOfBoundsException、それは今確認できません。私はLog.dを試してみましょう、あなたはそれを使用する方法についてのリンクを持っていますか? – Siebe

答えて

0

私の問題を発見しました。ここで:

}else if(title == "vakken"){ 
    result = db.getAllRowsAsArrays("weekSubjects", null); 
} 

weekSubjectsは、(最後のSなし)weekSubject

関連する問題