-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を作ろうとします。
こんにちはSwwizardする必要があります!あなたのエラーがStringIndexOutOfBoundsExceptionに関連していることをどのように確かめることができますか?実行フローを 'Log.d()'して、ソースのどの行に問題が発生しているかを特定する必要があります。また、引数の値をNative関数呼び出しに記録します。 –
スタックを*ネイティブ*メソッドでポストする必要があります。これはあなたが以前に間違ったことを示し、他の人があなたを助けるのを助けるかもしれません。これは投稿したスタックトレース全体ではありません。 – Knickedi
@Laurent 'スタックの上にStringIndexOutOfBoundsExceptionがあります。たぶんStringArrayIndexOutOfBoundsException、それは今確認できません。私はLog.dを試してみましょう、あなたはそれを使用する方法についてのリンクを持っていますか? – Siebe