Protobuf + Java:java.lang.IndexOutOfBoundsException: 索引 0 超出范围,大小为 0。

5
if (hashTags!=null && hashTags.size()>0) {
        for (int i = 0; i<hashTags.size();i++){
        getPostsRequestBuilder.setTags(i, hashTags.get(i));                         
        }
    }

现在,hashTags是一个ArrayList<String>且不为空,所以问题不在于它。 Protobuf中的标签是一个重复的字符串。 因此,如果我删除getPostsRequestBuilder.setTags并什么也不做-程序不会崩溃,因此问题出在那里。它会在第一个(0)元素上崩溃。

12-22 15:24:25.390: E/AndroidRuntime(6252): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
12-22 15:24:25.390: E/AndroidRuntime(6252):     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
12-22 15:24:25.390: E/AndroidRuntime(6252):     at java.util.ArrayList.set(ArrayList.java:481)
12-22 15:24:25.390: E/AndroidRuntime(6252):     at com.google.protobuf.LazyStringArrayList.set(LazyStringArrayList.java:119)
12-22 15:24:25.390: E/AndroidRuntime(6252):     at com.google.protobuf.LazyStringArrayList.set(LazyStringArrayList.java:1)
12-22 15:24:25.390: E/AndroidRuntime(6252):     at protobuf.shrick.Shrick$GetPostsRequest$Builder.setTags(Shrick.java:20845)
12-22 15:24:25.390: E/AndroidRuntime(6252):     at pro.shrick.asynctasks.SearchRequest.doInBackground(SearchRequest.java:29)
12-22 15:24:25.390: E/AndroidRuntime(6252):     at pro.shrick.asynctasks.SearchRequest.doInBackground(SearchRequest.java:1)
1个回答

14

您应该只使用set*方法来覆盖当前在重复字段中的值。您的重复字段目前为空,因此没有第0个元素可供覆盖。

使用add*方法向重复字段添加新值:

getPostsRequestBuilder.addTags(hashTags.get(i));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接