Java 从Android解析API获取图像时出现问题

Java 从Android解析API获取图像时出现问题,java,android,android-asynctask,parse-platform,Java,Android,Android Asynctask,Parse Platform,我对解析和Android API还不熟悉。我想获取我的用户的图片,但问题是在获取这些图片后,我无法获取这些图片。确切地说,我使用了加载程序,在onCreateLoader中获取图片后,我无法在onLoadFinished方法中获取图片 我该怎么办 当前代码: public Loader<List<ParseUser>> onCreateLoader(int id, Bundle args) { return new ThrowableLoader<List&

我对解析和Android API还不熟悉。我想获取我的用户的图片,但问题是在获取这些图片后,我无法获取这些图片。确切地说,我使用了加载程序,在onCreateLoader中获取图片后,我无法在onLoadFinished方法中获取图片

我该怎么办

当前代码:

public Loader<List<ParseUser>> onCreateLoader(int id, Bundle args) {
    return new ThrowableLoader<List<ParseUser>>(getActivity(), users) {
        // where ThrowableLoader simply extends AsyncLoader which implements loadData
        @Override
        public List<ParseUser> loadData() throws Exception {
            try {
                if(getActivity() != null) {
                    ParseQuery<ParseUser> query = ParseUser.getQuery();
                    query.orderByAscending(Constants.ParseConstants.KEY_USERNAME);
                    query.setLimit(10);
                    users = query.find();
                    bitmap = new Bitmap[users.size()];

                    for(ParseUser user : users) {
                        ParseFile file = (ParseFile) user.get("picture");
                        if(file != null)
                        file.getDataInBackground(new GetDataCallback() {
                            public void done(byte[] data, ParseException e) {
                                if (e == null) {
                                    bitmap[0] = BitmapFactory.decodeByteArray(data, 0, data.length); // here I put this bitmap[0] as a test purpose
                                }
                                else {
                                    System.out.println("Loading image failed for the user" + e.getMessage());
                                }
                            }
                        });
                    }

您是否在循环中存在性能问题,或者是其他类型的缺陷

IMO-代码中的内部循环

 file.getDataInBackground
突出的几个原因与可伸缩性和parse SDK如何实现支持InBackground的AsyncTask的细节有关。我链接到了另一个线程,它解释了为什么在循环中调用inBackground类型的东西可能不是一个好主意,因为它们可能在AsnycTask块上没有高优先级,或者它们仍然是单线程,您将陷入一个循环构造中,使用diff循环管理器可以运行得更快

如果您只有一个用户,并且代码运行正常,这可能意味着没有更大的数组(必须循环执行以下迭代步骤),代码运行正常:

获取与照片对应的URL

解码获取位图的响应流

我建议您考虑获取URL的列表,然后考虑

使用多个连接的线程池

Get the Photo
pass the response stream to a bitmap decoder

我用parse对此进行了测试,使用parse版本的AsnycTask在循环器中得到了3秒而不是8分钟,我知道当时是单线程的。

如果userList大小只有1个用户,你会得到什么结果?用户包装getDatainBackground的循环在所有IMO中都不太可能很好地扩展。我将考虑获取用户照片的url列表,然后花一些时间优化网络GET和存储为解析文件的照片url列表上的Bmp.decode。@RobertRowntree抱歉,我不理解您的响应。您的意思是我需要使用Loader查询用户,然后为每个用户存储ParseFile对象ParseFile file=ParseFile user.getpicture;。但是,我需要运行getDataInBackground,我该在哪里运行呢?谢谢你的详细回复,但很抱歉我对Android非常陌生,你能提供一些关于多连接线程池的文档链接吗?