我正在使用gridview和图像适配器创建图库。当我将项目文件夹中的静态值传递给图像适配器时,它工作正常。但是当我试图从数据库中获取图像路径列表然后使用相同的过程填充它时会出现错误
这是我的图像适配器
public class ImageAdapter extends BaseAdapter {
private Context context;
GetData findData = new GetData();
public String[] images = findData.getImageList(1);
public ImageAdapter(Context c){
context = c;
}
@Override
public int getCount() {
return images.length;
}
@Override
public Object getItem(int position) {
return images[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
ImageView imageView = new ImageView(context);
imageView.setImageResource(Integer.parseInt(images[position]));
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
imageView.setLayoutParams(new GridView.LayoutParams(240,240));
return imageView;
}
}
这是我调用的函数来获取图像路径的String数组列表:
public String[] getImageList(Integer schoolId) {
String[] imageList = new String[500];
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DBuser, DBpassword);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("select `image_path` FROM `photo_gallery` WHERE `school_id`=" + schoolId);
//ResultSetMetaData rsmd = rs.getMetaData();
int i = 0;
while (rs.next()) {
if (rs != null) {
imageList[i] = rs.getString("image_path");
i++;
} else {
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return imageList;
}
这是我的错误日志
08-05 12:29:45.458 12782-12782/com.adt.alphadev.itdp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.adt.alphadev.itdp, PID: 12782
java.lang.NumberFormatException: Invalid int: "null"
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parseInt(Integer.java:358)
at java.lang.Integer.parseInt(Integer.java:334)
at com.adt.alphadev.itdp.Hm.ImageAdapter.getView(ImageAdapter.java:60)
at android.widget.AbsListView.obtainView(AbsListView.java:2347)
at android.widget.GridView.onMeasure(GridView.java:1060)
at android.view.View.measure(View.java:17547)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:607)
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:674)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615)
at android.view.View.measure(View.java:17547)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2015)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1173)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1379)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
这里发生了什么......
答案 0 :(得分:1)
问题出在这里
imageView.setImageResource(Integer.parseInt(images[position]));
您正在尝试将字符串(图像路径)转换为整数,并将该整数提供给setImageResource
。那是不可能的。
首先,因为setImageResource
接受一个可绘制的id(应该在apk中)。
其次,我期待图像路径可能在SD上,因此您必须以不同的方式加载图像。
答案 1 :(得分:0)
<强> imageView.setImageResource(的Integer.parseInt(图像[位置])); 强>
这是问题所在。 首先,您的图像[位置]为空。检查该数组。
其次,代码应为:
imageView.setImageResource(images[position]);