4
回答
android 程序,本来运行的好好的,今天突然就运行报错,有谁遇到过这种情况啊?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
08-13 10:15:12.790: W/dalvikvm(8959): threadid=1: thread exiting with uncaught exception (group=0x40a041f8)
08-13 10:15:12.830: E/AndroidRuntime(8959): FATAL EXCEPTION: main
08-13 10:15:12.830: E/AndroidRuntime(8959): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at java.util.ArrayList.get(ArrayList.java:304)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at com.amaker.wlo.OrderActivity$ImageAdapter.getView(OrderActivity.java:217)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.widget.AbsListView.obtainView(AbsListView.java:2033)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.widget.GridView.onMeasure(GridView.java:1026)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.view.View.measure(View.java:12727)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.view.View.measure(View.java:12727)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.view.View.measure(View.java:12727)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.view.View.measure(View.java:12727)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.view.View.measure(View.java:12727)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1089)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2467)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.os.Handler.dispatchMessage(Handler.java:99)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.os.Looper.loop(Looper.java:137)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at android.app.ActivityThread.main(ActivityThread.java:4424)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at java.lang.reflect.Method.invokeNative(Native Method)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at java.lang.reflect.Method.invoke(Method.java:511)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-13 10:15:12.830: E/AndroidRuntime(8959): 	at dalvik.system.NativeStart.main(Native Method)

举报
skywxx
发帖于5年前 4回/6K+阅
共有4个答案 最后回答: 5年前
数组越界,边界没考虑好吧
--- 共有 3 条评论 ---
skywxx回复 @leo108 : 好吧,但还是很头疼,因为我这个只是一个按钮的点击事件,点击后进入一个页面,该页面从数据库读数据并显示,数据库的数据还是原来那些,一点都没变,怎么会呢? 5年前 回复
leo108回复 @skywxx : 今天的数据触发了边界呗 5年前 回复
skywxx如果出现这种错误,那为什么昨天运行还是很正常的,今天就报错呢?程序一点都没变动 5年前 回复

准确的来说,你读到的 数据是 0 然而 你在程序里面调用的 不是 0  所以报错

java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

我也出过一样的错,在 查询语句 那边打印一下  你查出来的数据  查出来了没有,查出来了就 看你Activity 里面写的 接受收数据的 哪个方法  接收数据是不是 超过了 你查的 数据,我的是这样的,我之前数据全部查出来了,但是就是因为  利用数据的地方  得到的比他实际的大。。仔细看一下。。。就这两个地方。。。

--- 共有 2 条评论 ---
skywxx什么原因会导致从服务器端读不到数据呢?我打印了一下读取的id和name,执行后都没打印出来 5年前 回复
skywxx我发现你总是能一语道破关键所在,现在问题就是从本地数据库是空的,服务器端数据库是有数据的呀,为什么就读不出来了呢? 5年前 回复

根本原因:你的代码本身就有问题,在进行数组取值之前,没有进行验证判断;

之前没有报错,是因为存在数据,而今天没有数据了,你的数组length为0,而你还在取array[0],当然就数组下标越界了!

--- 共有 2 条评论 ---
情天大圣回复 @skywxx : 当然,你的代码有问题! 5年前 回复
skywxx确实是SQLite是空的,前两天运行还挺正常的,而且服务器端的数据库是有数据的,从服务器端读数据并存储到本地的程序没改动过,这样也会出来错误呢? 5年前 回复

引用来自“情天大圣”的答案

根本原因:你的代码本身就有问题,在进行数组取值之前,没有进行验证判断;

之前没有报错,是因为存在数据,而今天没有数据了,你的数组length为0,而你还在取array[0],当然就数组下标越界了!

private void update() {

String urlStr = HttpUtil.BASE_URL + "servlet/UpdateServlet";
try {
	URL url = new URL(urlStr);
	URLConnection conn = url.openConnection();
	InputStream in = conn.getInputStream();
	
	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	DocumentBuilder builder = factory.newDocumentBuilder();
	Document doc = builder.parse(in);
	System.out.println(doc);//这个地方打印doc,但是程序执行后,没有打印出来
	NodeList nl = doc.getElementsByTagName("menu");


	ContentResolver cr = getContentResolver();
	
	Uri uri1 = Menus.CONTENT_URI;

	cr.delete(uri1, null, null);

	// 循环将数据保存到数据表
	for (int i = 0; i < nl.getLength(); i++) {
				
		ContentValues values = new ContentValues();
				
		int id = Integer.parseInt(doc.getElementsByTagName("id").item(i).getFirstChild().getNodeValue());
	System.out.println(id);//程序执行后,这个地方也没有打印出来	
				
		String name = doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue();
	System.out.println(name);//程序执行后,这个地方也没有打印出来	
				
		values.put("_id", id);
		values.put("name", name);
				
		// 插入到数据库
		cr.insert(uri1, values);
		in.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

你看一下这段程序有问题吗?这段程序就是我从服务器数据库读数据并更新本地数据库。
--- 共有 4 条评论 ---
skywxx回复 @朱洋洋 : 我在网上查了一些资料,也都是跟我一样用的,但是,,你看一下我上面的程序,打印doc那个地方没打印出来,这是怎么回事呢? 5年前 回复
黛曦葛溪回复 @skywxx : 我忘了,你连接的是数据库不是图片,不好意思,不过有结果 说明你连接没有错,可以读到网址里面的文件。。。具体我也不清楚了,你看看你打印的地方到 InputStream in 这中间的代码有没有问题。。。 5年前 回复
skywxx我写上 int size =conn.getlength(); getlength()有错误,然后改成int size =conn.getContentLength(); 打印出来size------------>>-1libcore.net.http.ChunkedInputStream@411d5d98,这是什么结果啊 5年前 回复
黛曦葛溪在 URLConnection conn = url.openConnection(); 下面写 int int size =conn.getlength();打印看看 size 大小,看看是不是连接成功 并得到了长度,如果 是0 就是没有连接成功都 5年前 回复
顶部