Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法使用AsyncTask加载图像_Android_Gridview_Android Asynctask - Fatal编程技术网

Android 无法使用AsyncTask加载图像

Android 无法使用AsyncTask加载图像,android,gridview,android-asynctask,Android,Gridview,Android Asynctask,我有一个场景,需要在加载主页时从URL检索图像。主页由30个图像组成,最初只加载了10个图像。进一步滚动后,会检索其他图像(我不是指PullToRefresh功能)。我正在StaggedGridView(Github的库)中设置图像。我能够从WebService call加载所有图像,并且能够在logcat中打印其名称,但是无法设置除第一个图像之外的所有图像。当滚动调用第二个asyn任务(加载接下来的10个图像)时,也只设置来自第二个异步任务(也是第一个图像)的图像(这里参考第11个图像)。我已

我有一个场景,需要在加载主页时从URL检索图像。主页由30个图像组成,最初只加载了10个图像。进一步滚动后,会检索其他图像(我不是指PullToRefresh功能)。我正在StaggedGridView(Github的库)中设置图像。我能够从WebService call加载所有图像,并且能够在logcat中打印其名称,但是无法设置除第一个图像之外的所有图像。当滚动调用第二个asyn任务(加载接下来的10个图像)时,也只设置来自第二个异步任务(也是第一个图像)的图像(这里参考第11个图像)。我已将notifyDataSetChanged调用到适配器,但它会引发NullPointerException

代码:

 mGridView = (StaggeredGridView) findViewById(R.id.grid_view);

        context = getApplicationContext();

        new WebServicesClass();



        mGridView.setOnScrollListener(this);

        mGridView.setOnItemClickListener(this);
    }

    @Override
    protected void onSaveInstanceState(final Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putStringArrayList(SAVED_DATA_KEY, mData);
    }

    @Override
    public void onScrollStateChanged(final AbsListView view, final int scrollState) {
        Log.d(TAG, "onScrollStateChanged:" + scrollState);
    }

    @Override
    public void onScroll(final AbsListView view, final int firstVisibleItem, final int visibleItemCount, final int totalItemCount) {
        Log.d(TAG, "onScroll firstVisibleItem:" + firstVisibleItem +
                            " visibleItemCount:" + visibleItemCount +
                            " totalItemCount:" + totalItemCount);
        // our handling
        if (!mHasRequestedMore) {

            System.out.println("Inside the requested more");
            int lastInScreen = firstVisibleItem + visibleItemCount;
          //  if (lastInScreen >= totalItemCount) {

                Log.d(TAG, "onScroll lastInScreen - so load more");
                mHasRequestedMore = true;
                new WebServicesClass().onLoadMoreItems();
                mAdapter.notifyDataSetChanged();
                mHasRequestedMore = false;
            //}
        }
    }
WebServicesClass:

 mGridView = (StaggeredGridView) findViewById(R.id.grid_view);

        context = getApplicationContext();

        new WebServicesClass();



        mGridView.setOnScrollListener(this);

        mGridView.setOnItemClickListener(this);
    }

    @Override
    protected void onSaveInstanceState(final Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putStringArrayList(SAVED_DATA_KEY, mData);
    }

    @Override
    public void onScrollStateChanged(final AbsListView view, final int scrollState) {
        Log.d(TAG, "onScrollStateChanged:" + scrollState);
    }

    @Override
    public void onScroll(final AbsListView view, final int firstVisibleItem, final int visibleItemCount, final int totalItemCount) {
        Log.d(TAG, "onScroll firstVisibleItem:" + firstVisibleItem +
                            " visibleItemCount:" + visibleItemCount +
                            " totalItemCount:" + totalItemCount);
        // our handling
        if (!mHasRequestedMore) {

            System.out.println("Inside the requested more");
            int lastInScreen = firstVisibleItem + visibleItemCount;
          //  if (lastInScreen >= totalItemCount) {

                Log.d(TAG, "onScroll lastInScreen - so load more");
                mHasRequestedMore = true;
                new WebServicesClass().onLoadMoreItems();
                mAdapter.notifyDataSetChanged();
                mHasRequestedMore = false;
            //}
        }
    }
doInBackGround()的内容如下:

               String image_url = "http://demo.bsetec.com/fancyclone/uploads/approved_items/"
                                        + first_image;
                                // System.out.println("The image url is " +
                                // image_url);
                                URL url = new URL(image_url);
                                URLConnection conn = url.openConnection();

                                if (!(conn instanceof HttpURLConnection))
                                    throw new IOException(
                                            "Not an HTTP connection");

                                try {

                                    HttpURLConnection httpConn = (HttpURLConnection) conn;
                                    httpConn.setAllowUserInteraction(false);
                                    httpConn.setInstanceFollowRedirects(true);
                                    httpConn.setRequestMethod("GET");
                                    httpConn.connect();

                                    response = httpConn.getResponseCode();
                                    if (response == HttpURLConnection.HTTP_OK) {

                                        in = httpConn.getInputStream();
                                        compressed_image = image;

                                        BitmapFactory.Options options = new BitmapFactory.Options();
                                        options.inPurgeable = true;
                                        options.inJustDecodeBounds = true;
                                        options.inSampleSize = 1;
                                        options.inJustDecodeBounds = false;
                                        image = BitmapFactory.decodeStream(in,
                                                null, options);

                                    }
                                } catch (Exception ex) {
                                    throw new IOException("Error connecting");
                                }


                                item = new RowItem(image, product_name, cost,
                                        product_id, dream_status,username);
                                rowItems.add(item);
其中item是holder类的对象,holder类具有get、set方法,rowItems是类型为holder类的列表的对象

MainActivty.java:

 mGridView = (StaggeredGridView) findViewById(R.id.grid_view);

        context = getApplicationContext();

        new WebServicesClass();



        mGridView.setOnScrollListener(this);

        mGridView.setOnItemClickListener(this);
    }

    @Override
    protected void onSaveInstanceState(final Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putStringArrayList(SAVED_DATA_KEY, mData);
    }

    @Override
    public void onScrollStateChanged(final AbsListView view, final int scrollState) {
        Log.d(TAG, "onScrollStateChanged:" + scrollState);
    }

    @Override
    public void onScroll(final AbsListView view, final int firstVisibleItem, final int visibleItemCount, final int totalItemCount) {
        Log.d(TAG, "onScroll firstVisibleItem:" + firstVisibleItem +
                            " visibleItemCount:" + visibleItemCount +
                            " totalItemCount:" + totalItemCount);
        // our handling
        if (!mHasRequestedMore) {

            System.out.println("Inside the requested more");
            int lastInScreen = firstVisibleItem + visibleItemCount;
          //  if (lastInScreen >= totalItemCount) {

                Log.d(TAG, "onScroll lastInScreen - so load more");
                mHasRequestedMore = true;
                new WebServicesClass().onLoadMoreItems();
                mAdapter.notifyDataSetChanged();
                mHasRequestedMore = false;
            //}
        }
    }

我很乐意帮助澄清。提前谢谢

你可以告诉我们eimageloader:)我在加载图像方面没有任何问题,我只是缺少了一些限制我显示所有图像的内容。好吧,我找到另一种方法来回答你的问题……)