Java Android应用程序崩溃-列表视图-CSV文件
好的,我正在尝试填充列表视图,但加载时它会崩溃 将产品从中的CSV导入Android Studio中的列表视图 这是我的CSV 主要活动:Java Android应用程序崩溃-列表视图-CSV文件,java,android,listview,csv,android-listview,Java,Android,Listview,Csv,Android Listview,好的,我正在尝试填充列表视图,但加载时它会崩溃 将产品从中的CSV导入Android Studio中的列表视图 这是我的CSV 主要活动: import android.app.Activity; import android.os.Bundle; import android.widget.ListView; public class MainActivity extends Activity { ListViewAdapter itemAdapter; @Overrid
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
public class MainActivity extends Activity {
ListViewAdapter itemAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView itemList = (ListView)findViewById(R.id.itemListView);
itemAdapter = new ListViewAdapter(this, -1);
itemList.setAdapter(itemAdapter);
}
}
ListViewAdapter
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ListViewAdapter extends ArrayAdapter<DataStates> {
Context contxt;
public ListViewAdapter(Context context, int testViewResourceID) {
super(context, testViewResourceID);
contxt = context;
loadArrayData();
}
@Override
public View getView (final int pos, View convertView, final ViewGroup parent) {
TextView mView = (TextView) convertView;
if(mView == null) {
mView = new TextView(parent.getContext());
mView.setTextSize(28);
}
return mView;
}
private void loadArrayData() {
try {
InputStream is = contxt.getAssets().open("data.csv");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
String[] RowData = line.split(",");
DataStates cur = new DataStates();
cur.setTitle(RowData[2]);
cur.setPrice(RowData[3]);
cur.setDescription(RowData[4]);
this.add(cur);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
主要活动
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:orientation="vertical">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/itemListView"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true" />
</LinearLayout>
日志信息
10-07 21:43:31.241 25819-25819/tk.delacour.projectalpha D/dalvikvm﹕ Late-enabling CheckJNI
10-07 21:43:31.241 25819-25819/tk.delacour.projectalpha D/dalvikvm﹕ Try to disable coredump for pid 25819
10-07 21:43:31.241 25819-25819/tk.delacour.projectalpha D/dalvikvm﹕ Process 25819 nice name: tk.delacour.projectalpha
10-07 21:43:31.241 25819-25819/tk.delacour.projectalpha D/dalvikvm﹕ Extra Options: not specified
10-07 21:43:31.401 25819-25819/tk.delacour.projectalpha D/AndroidRuntime﹕ Shutting down VM
10-07 21:43:31.401 25819-25819/tk.delacour.projectalpha W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x42f05500)
10-07 21:43:31.411 25819-25819/tk.delacour.projectalpha E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{tk.delacour.projectalpha/tk.delacour.projectalpha.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=4; index=4
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
at android.app.ActivityThread.access$600(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5390)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=4; index=4
at tk.delacour.projectalpha.ListViewAdapter.loadArrayData(ListViewAdapter.java:63)
at tk.delacour.projectalpha.ListViewAdapter.<init>(ListViewAdapter.java:28)
at tk.delacour.projectalpha.MainActivity.onCreate(MainActivity.java:19)
at android.app.Activity.performCreate(Activity.java:5303)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
at android.app.ActivityThread.access$600(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5390)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
10-07 21:43:31.241 25819-25819/tk.delacour.projectalpha D/dalvikvm﹕ 延迟启用CheckJNI
10-07 21:43:31.241 25819-25819/tk.delacour.projectalpha D/dalvikvm﹕ 尝试禁用pid 25819的coredump
10-07 21:43:31.241 25819-25819/tk.delacour.projectalpha D/dalvikvm﹕ 进程25819很好的名称:tk.delacour.projectalpha
10-07 21:43:31.241 25819-25819/tk.delacour.projectalpha D/dalvikvm﹕ 额外选项:未指定
10-07 21:43:31.40125819-25819/tk.delacour.projectalpha D/AndroidRuntime﹕ 关闭虚拟机
10-07 21:43:31.40125819-25819/tk.delacour.projectalpha W/dalvikvm﹕ threadid=1:线程以未捕获异常退出(组=0x42f05500)
10-07 21:43:31.411 25819-25819/tk.delacour.projectalpha E/AndroidRuntime﹕ 致命异常:主
java.lang.RuntimeException:无法启动活动组件信息{tk.delacour.projectalpha/tk.delacour.projectalpha.MainActivity}:java.lang.ArrayIndexOutOfBoundsException:长度=4;指数=4
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342)
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
在android.app.ActivityThread.access$600(ActivityThread.java:148)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:150)
位于android.app.ActivityThread.main(ActivityThread.java:5390)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:525)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:737)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.ArrayIndexOutOfBoundsException:长度=4;指数=4
位于tk.delacour.projectalpha.ListViewAdapter.loadArrayData(ListViewAdapter.java:63)
位于tk.delacour.projectalpha.ListViewAdapter。(ListViewAdapter.java:28)
位于tk.delacour.projectalpha.MainActivity.onCreate(MainActivity.java:19)
位于android.app.Activity.performCreate(Activity.java:5303)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
在android.app.ActivityThread.access$600(ActivityThread.java:148)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:150)
位于android.app.ActivityThread.main(ActivityThread.java:5390)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:525)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:737)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
在dalvik.system.NativeStart.main(本机方法)
索引以0开头,所以
cur.setDescription(RowData[4]);
将导致NPE,因为在CSV中只有4列(索引为0,1,2,3)
您案例中的描述索引为
3
确定此时您的程序失败:
while ((line = reader.readLine()) != null) {
String[] RowData = line.split(",");
DataStates cur = new DataStates();
cur.setTitle(RowData[2]);
cur.setPrice(RowData[3]);
// now there is a ArrayIndexOutOfBoundsException
cur.setDescription(RowData[4]);
this.add(cur);
}
索引从0开始,所以我认为正确的代码应该是
while ((line = reader.readLine()) != null) {
String[] RowData = line.split(",");
if(RowData.length <4)
continue;
DataStates cur = new DataStates();
cur.setTitle(RowData[1]);
cur.setPrice(RowData[2]);
cur.setDescription(RowData[3]);
this.add(cur);
}
while((line=reader.readLine())!=null){
String[]RowData=line.split(“,”);
如果(RowData.length需要替换
cur.setTitle(RowData[2]);
cur.setPrice(RowData[3]);
cur.setDescription(RowData[4]);
与
RowData中只有4个值,您正在尝试访问第5个值
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=4; index=4
你需要考虑索引0到3,而不是1到4。
希望这有帮助。共享您的logcat outputOk,刚刚编辑它,logcat postedApp在启动时仍会崩溃。应用程序在启动时仍会崩溃。确定在读取RowData之前,您必须检查其大小是否为4或更大如果(RowData.length>=4){
。如果RowData的大小不是4或更大,则应跳过此行。可能此行为空?我检查了您的csv文件,发现最后一行为空行。由于没有“,”行。拆分(“,”
将返回类似于此的字符串数组{”)
。我已经编辑了我的帖子,所以代码不应该再次崩溃。我已经更改了我的csv,为最后3个条目留出了一个空格,并将代码替换为您的一个条目,但它显示时没有显示内部数据。我会检查它读取的内容,然后在系统输出时添加一些内容。
这样您就可以看到失败isApp仍然崩溃的地方启动时。请发布新的故障日志@UrbanChrisy@UrbanChrisy在String[]RowData=line.split(,”)之后添加System.ut.println(“RowData的大小:“+RowData.length”);
,并在控制台中检查其大小。
cur.setTitle(RowData[1]);
cur.setPrice(RowData[2]);
cur.setDescription(RowData[3]);
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=4; index=4