做安卓程序时遇到一个问题,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();
}
};
}
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();
}
};
}
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()
函数返回值做下标最好先判断下是否返回正值
这里是有错的
应该是book.length()-1;(文中出现了2次)
bm.setPosition(Integer.parseInt(book.substring(book.indexOf("#")+1,book.length() - 1)+1));
因为下标从0开始
还有你真的需要先判断下那些indexOf是不是对的,不然容易出错,因为极有可能没有你指定的符号
不能添加bm的值了
你的indexof没错,我说的是你的结束位置出错,你的结束点应该是book.length()-1而不是book.length(),我只是说要你最好判断下indexof强壮代码你都try,catch了肯定过了,但是没有添加bm那是肯定的,因为你添加之前就出错了程序就跑到catch那去了,出错之后到catch之前都不会跑
真是个够坚持的人,早点把完整的出错Log信息发上来和代码发上来就早解决了。