做安卓程序时遇到一个问题,logcat提示数值越界,logcat(我只写出了错误提示的)如下:
cause by:java.lang.StringIndexOutOfboundsException;
at com.comic.activity.ext.bookActivity.getFileContent...
at com.comic.activity.ext.bookActivity.onCreate...
at com.comic.activity.ext.bookActivity.setBookMarkAdapter...源码如下,请指教
package com.comic.activity.ext;import java.util.ArrayList;
import java.util.List;import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageButton;
import android.widget.ListView;import com.comic.R;import com.comic.activity.core.BaseActivity;
import com.comic.adapter.ImageAdapter;import com.comic.dialog.DefaultDialog;
import com.comic.dialog.bookDialog;import com.comic.util.BookMark;
import com.comic.util.constans;
import com.comic.util.utils;
public class bookActivity extends BaseActivity {
private ImageButton goBackBtn;
private ListView bookList;
private List<BookMark> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_book_list);
allActivity.add(this);
goBackBtn=(ImageButton)findViewById(R.id.goback);
bookList=(ListView)findViewById(R.id.booklist);
setBookMarkAdapter();
}
public List<BookMark> getFileContent(){
List<BookMark> list= new ArrayList<BookMark>();
String content=utils.getFileRead(constans.BOOKMARKS);
if(content!=null && content.length()>0){
String[] bookMarks=content.split(";");
for(int i=0;i<bookMarks.length;i++){
BookMark bm=new BookMark();
String book=bookMarks[i];
bm.setBookname(book.substring(0, book.indexOf("|")));
bm.setSavaTime(book.substring(book.indexOf("|")+1,book.indexOf(",")));
bm.setImagepath(book.substring(book.indexOf(",")+1,book.indexOf("#")));
bm.setPosition(Integer.parseInt(book.substring(book.indexOf("#")+1,book.length())+1));
bm.setImageId(book.substring(book.indexOf("#")+1,book.length()));
list.add(bm);
bm=null;
}
}else{
utils.showmessage(this, getString(R.string.nobook),2);
}
return list;
}
    public void setBookMarkAdapter(){
     list=getFileContent();
     ImageAdapter imageAdapter=new ImageAdapter(list,bookActivity.this);
     bookList.setAdapter(imageAdapter);
     bookList.setOnItemClickListener(itemOnClickListener);
    }
private OnItemClickListener itemOnClickListener=new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
BookMark book=list.get(position);
String[] bookMarkArray={getString(R.string.check),getString(R.string.delete),getString(R.string.deleteall)};
DefaultDialog dialog=new bookDialog(bookActivity.this,book,bookMarkArray);
dialog.setTitle(R.string.bookSetUp);
dialog.show();
}
};

}

解决方案 »

  1.   

    发详细Log,里面有错误行数。
      

  2.   

    Log信息不详细,而且代码里语句不严谨:
    bm.setBookname(book.substring(0, book.indexOf("|")));
    bm.setSavaTime(book.substring(book.indexOf("|")+1,book.indexOf(",")));
    bm.setImagepath(book.substring(book.indexOf(",")+1,book.indexOf("#")));
    bm.setPosition(Integer.parseInt(book.substring(book.indexOf("#")+1,book.length())+1));
    bm.setImageId(book.substring(book.indexOf("#")+1,book.length()));
    使用indexOf()
    函数返回值做下标最好先判断下是否返回正值
      

  3.   

    bm.setPosition(Integer.parseInt(book.substring(book.indexOf("#")+1,book.length())+1));
    这里是有错的
    应该是book.length()-1;(文中出现了2次)
    bm.setPosition(Integer.parseInt(book.substring(book.indexOf("#")+1,book.length() - 1)+1));
    因为下标从0开始
    还有你真的需要先判断下那些indexOf是不是对的,不然容易出错,因为极有可能没有你指定的符号
      

  4.   

    indexof 截取的值没问题    我把上面的代码try catch一下   没有问题了,但是list.add(bm);
    不能添加bm的值了
      

  5.   


    你的indexof没错,我说的是你的结束位置出错,你的结束点应该是book.length()-1而不是book.length(),我只是说要你最好判断下indexof强壮代码你都try,catch了肯定过了,但是没有添加bm那是肯定的,因为你添加之前就出错了程序就跑到catch那去了,出错之后到catch之前都不会跑
      

  6.   

    按你的方法改成book.length()-1后依然不对,log提示还是一样
      

  7.   


    真是个够坚持的人,早点把完整的出错Log信息发上来和代码发上来就早解决了。