Java Android MySQL将结果集写入数组,然后写入gridview

Java Android MySQL将结果集写入数组,然后写入gridview,java,mysql,bitmap,resultset,Java,Mysql,Bitmap,Resultset,我有一个带有图像Blob的MySQL表,现在我想检索它们并将它们写入数组,以便稍后在gridview中显示它们。但我的问题是while循环永远不会结束 下面是一些关于发生了什么的日志文件 06-13 23:16:24.550 29200-29224/com.test.app I/System.out: Getting Image with id:11 06-13 23:16:24.555 29200-29224/com.test.app

我有一个带有图像Blob的MySQL表,现在我想检索它们并将它们写入数组,以便稍后在gridview中显示它们。但我的问题是while循环永远不会结束

下面是一些关于发生了什么的日志文件

06-13 23:16:24.550  29200-29224/com.test.app                  I/System.out: Getting Image with id:11
06-13 23:16:24.555  29200-29224/com.test.app                  I/System.out: Getting Image with id:12
06-13 23:16:24.760  29200-29225/com.test.app                  I/System.out: com.mysql.jdbc.ResultSet@41860510
06-13 23:16:24.765  29200-29225/com.test.app                  I/System.out: Getting Image with id:11
06-13 23:16:24.780  29200-29225/com.test.app                  I/System.out: Getting Image with id:12
06-13 23:16:25.095  29200-29226/com.test.app                  I/System.out: com.mysql.jdbc.ResultSet@41fe2788
06-13 23:16:25.105  29200-29226/com.test.app                  I/System.out: Getting Image with id:11
06-13 23:16:25.110  29200-29226/com.test.app                  I/System.out: Getting Image with id:12
06-13 23:16:25.450  29200-29222/com.test.app                  I/System.out: com.mysql.jdbc.ResultSet@41809328
06-13 23:16:25.455  29200-29222/com.test.app                  I/System.out: Getting Image with id:11
06-13 23:16:25.460  29200-29222/com.test.app                  I/System.out: Getting Image with id:12
这是我的应用程序的代码

public class Activity2CameraView extends Activity {

private static final String driver = "com.mysql.jdbc.Driver";
private static final String url = "jdbc:mysql://XXXX";
private static final String user = "XXXX";
private static final String pass = "XXXX";

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    new getImage().execute();
}

private class getImage extends AsyncTask<Void, Void, ArrayList<HashMap<String, Bitmap>>> {
    ArrayList<HashMap<String, Bitmap>> mylist = new ArrayList<HashMap<String, Bitmap>>();

    @Override
    protected ArrayList<HashMap<String, Bitmap>> doInBackground(Void... voids) {

        BitmapFactory.Options opt = new BitmapFactory.Options();
        opt.inDither = false;
        opt.inPreferredConfig = Bitmap.Config.RGB_565;
        HashMap map = new HashMap<String, Bitmap>();

        try {
            Class.forName(driver);
            Connection conn = DriverManager.getConnection(url, user, pass);
                PreparedStatement stat = conn.prepareStatement("SELECT id, imageblob FROM photos");
                ResultSet rset = stat.executeQuery();
                System.out.println(rset);
                rset.beforeFirst();
                while (rset.next()) {
                    ByteArrayInputStream inputStream = new ByteArrayInputStream(rset.getBytes("imageblob"));
                    Bitmap bm = BitmapFactory.decodeStream(inputStream);
                    int id = rset.getInt("id");
                    map.put("id", id);
                    map.put("image", bm);
                    mylist.add(map);
                    System.out.println("Getting Image with id:" + id);

                }
                rset.close();
                stat.close();
                conn.close();

                return mylist;

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(ArrayList<HashMap<String, Bitmap>> result) {
        setContentView(R.layout.cam_main);
        String[] from = {"id", "image"};
        int[] to = {R.id.id, R.id.image_db};
        SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(), result, R.layout.image_grid, from, to);

        // Getting a reference to gridview of MainActivity
        GridView gridView = (GridView) findViewById(R.id.gridview_cam);
        gridView.setAdapter(adapter);
        new getImage().execute();
    }
}
}
公共类活动2cameraview扩展活动{
私有静态最终字符串driver=“com.mysql.jdbc.driver”;
私有静态最终字符串url=“jdbc:mysql://XXXX";
私有静态最终字符串user=“XXXX”;
私有静态最终字符串传递=“XXXX”;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
新建getImage().execute();
}
私有类getImage扩展异步任务{
ArrayList mylist=新的ArrayList();
@凌驾
受保护的ArrayList doInBackground(无效…无效){
Options=new-BitmapFactory.Options();
opt.inDither=false;
opt.inPreferredConfig=Bitmap.Config.RGB_565;
HashMap=newHashMap();
试一试{
Class.forName(驱动程序);
Connection conn=DriverManager.getConnection(url、用户、通行证);
PreparedStatement stat=conn.prepareStatement(“从照片中选择id、imageblob”);
结果集rset=stat.executeQuery();
系统输出打印项次(rset);
rset.beforeFirst();
while(rset.next()){
ByteArrayInputStream inputStream=新的ByteArrayInputStream(rset.getBytes(“imageblob”);
位图bm=BitmapFactory.decodeStream(inputStream);
int id=rset.getInt(“id”);
地图放置(“id”,id);
地图放置(“图像”,bm);
添加(地图);
System.out.println(“获取id为“+id”的图像);
}
rset.close();
stat.close();
康涅狄格州关闭();
返回mylist;
}catch(classnotfounde异常){
e、 printStackTrace();
}捕获(SQLE异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(ArrayList结果){
setContentView(R.layout.cam_main);
字符串[]from={“id”,“image”};
int[]to={R.id.id,R.id.image_db};
SimpleAdapter=新的SimpleAdapter(getApplicationContext(),结果,R.layout.image_网格,从,到);
//获取对MainActivity的gridview的引用
GridView GridView=(GridView)findViewById(R.id.GridView\u-cam);
setAdapter(适配器);
新建getImage().execute();
}
}
}

将的解决方案添加到您的代码中,它应该会起作用……当您的
结束时,您的方法会被多次调用。