Android 如何使用AsyncTask在PaperAdapter中显示URL图像

Android 如何使用AsyncTask在PaperAdapter中显示URL图像,android,Android,最后,我更改代码并使用univeral image loader库 我使用paperadapter来显示url图像,就像代码一样,工作正常 @Override public Object instantiateItem(final ViewGroup container, final int position) { Drawable[] imageDrawable = new Drawable[3]; for (int i = 0; i < 3; i++) { imageDrawable[

最后,我更改代码并使用univeral image loader库

我使用paperadapter来显示url图像,就像代码一样,工作正常

@Override
public Object instantiateItem(final ViewGroup container, final int position) {
Drawable[] imageDrawable = new Drawable[3];
for (int i = 0; i < 3; i++) {
imageDrawable[i] = LoadImageFromWebOperations(server_url+ image_name.replace(" ","")+ "_0" +String.valueOf(i + 1) + ".jpg");
}
imageView = new ImageView(mContext);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageDrawable(imageDrawable[position]);
container.addView(imageView, 0);
return imageView;
}
但是我想使用asynctask来实现这一点,就像代码一样

@Override
public Object instantiateItem(final ViewGroup container, final int position) {

    AsyncTask<String, Void, Drawable[]> loadingImage = new AsyncTask<String, Void, Drawable[]>(){

        @Override
        protected Drawable[] doInBackground(String... params) {
            // TODO Auto-generated method stub
            Drawable imageDrawable[] = new Drawable[3];
            for (int i = 0; i < 3; i++) {
                imageDrawable[i] = LoadImageFromWebOperations(server_url
                        + image_name.replace(" ","")+ "_0" + String.valueOf(i + 1) + ".jpg");
                System.out.println("doInBackground="+position);
            }
            return imageDrawable;
        }
        @Override
        protected void onPostExecute(Drawable[] result) {
            System.out.println("onPostExecute="+position);
            imageView = new ImageView(getBaseContext());
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setImageDrawable(result[position]);
            container.addView(imageView, 0);
                }
            });
        }

    }; loadingImage.execute();
    return imageView;
}
工作不好,我发现位置1是空的,没有图片,但是位置0和2不是空的,等待一些建议,谢谢

这是所有代码:

 public class ProductDetailActivity1 extends FragmentActivity {

        ImageAdapter mAdapter;
        ViewPager mPager;
        CirclePageIndicator mIndicator;
        private String server_url;
        ImageView imageView;    
      protected ScrollView mScrollView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_product_detail1);

            mScrollView = (ScrollView)findViewById(R.id.card_scrollview);


            getActionBar();
            getActionBar().setHomeButtonEnabled(true);
            getActionBar().setDisplayHomeAsUpEnabled(true);
            getActionBar().setDisplayShowTitleEnabled(true);
            getActionBar().setTitle(R.string.product_detail);

            Intent intent = getIntent();
            server_url = intent.getStringExtra("SERVER_URL");

            mAdapter = new ImageAdapter(getApplicationContext());
            mPager = (ViewPager) findViewById(R.id.imageViewpager);
            mPager.setAdapter(mAdapter);


            mIndicator = (CirclePageIndicator) findViewById(R.id.indicator);
            mIndicator.setViewPager(mPager);
            mIndicator.setFillColor(0xFFFFFFFF);
            mIndicator.setStrokeColor(0xFFFFFFFF);
            mIndicator.setStrokeWidth(1);
            mIndicator.setRadius(6 * getResources().getDisplayMetrics().density);
            ((CirclePageIndicator) mIndicator).setSnap(true);
            mIndicator
                    .setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                        @Override
                        public void onPageSelected(int position) {
                        }

                        @Override
                        public void onPageScrolled(int position,
                                float positionOffset, int positionOffsetPixels) {
                        }

                        @Override
                        public void onPageScrollStateChanged(int state) {
                        }
                    });
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {

            switch (item.getItemId()) {
            case android.R.id.home:
                Intent intent = new Intent(ProductDetailActivity1.this,
                        com.wangrui.ams.MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                return true;
            default:
                return super.onOptionsItemSelected(item);
            }
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.product_detail, menu);
            return true;
        }

        public class ImageAdapter extends PagerAdapter {
            private Context mContext;
            private Drawable[] imageDrawable  = new Drawable[3];;

            public ImageAdapter(Context cx) {
                mContext = cx.getApplicationContext();
            }

            @Override
            public Object instantiateItem(final ViewGroup container, final int position) {
                AsyncTask<Void, Void, Drawable[]> loadingImage = new AsyncTask<Void, Void, Drawable[]>(){

                    @Override
                    protected Drawable[] doInBackground(Void... params) {
                        // TODO Auto-generated method stub  

                        for (int i = 0; i < 3; i++) {
                            imageDrawable[i] = LoadImageFromWebOperations(server_url
                                    + image_name.replace(" ","")+ "_0" + String.valueOf(i + 1) + ".jpg");
                            System.out.println("position="+i);
                        }
                        return imageDrawable;
                    }
                    @Override
                    protected void onPostExecute(Drawable[] result) {
                        imageView = new ImageView(mContext);
                        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    imageView.setImageDrawable(result[position]);
                        mPager.getAdapter().notifyDataSetChanged();
                         ((ViewPager) container).addView(imageView, position);

                    }               
                }; loadingImage.execute();

                return imageView;
            }

            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return 3;
            }

            @Override
            public boolean isViewFromObject(final View view, final Object object) {
                // TODO Auto-generated method stub
                //return arg0 == (View) arg1;
                return view == ((ImageView) object);
            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView((ImageView) object);
            }

        }

        private void showAlertMessage(String msg){

            SuperToast superToast = new SuperToast(getApplicationContext());
            superToast.setAnimations(SuperToast.Animations.FLYIN);
            superToast.setDuration(SuperToast.Duration.LONG);
            superToast.setBackground(SuperToast.Background.RED);
            superToast.setTextSize(SuperToast.TextSize.EXTRA_SMALL);
            superToast.setText(msg);
            superToast.show();
        }

        private Drawable LoadImageFromWebOperations(String url) {
            try {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                        .permitAll().build();
                StrictMode.setThreadPolicy(policy);
                InputStream is = (InputStream) new URL(url).getContent();
                Drawable d = Drawable.createFromStream(is, "src name");
                return d;
            } catch (Exception e) {
                System.out.println("Exc=" + e);
                return null;
            }
        }
    }

为什么每页都有一个加载多个图像的循环?上面哪一个代码是您希望使用的,您到底想做什么?@androiddeveloper感谢您的回复。我使用viewpaper指示器显示url中的图像。使用循环,因为这3个图像具有相似的文件名,但编号不同,但实例化项并不意味着您当前在该页面上。它只是加载页面。例如,如果您转到第1页,这意味着第0、1、2页需要调用此函数,以便用户在滚动屏幕时能够看到它们。如果希望侦听正在更改的页面,则需要调用setOnPageChangeListener。InstanceItem用于初始化页面,类似于AdapterView的getView,但不重复使用视图。另外,请回答我提出的问题,或者修改你的帖子,哪一个更好,这样我可以帮助你…而且,如果使用LoadImageFromWebOperations显示指标,它有一个误导性的名称…为什么你在回答中写它而不是编辑原始问题?而且,你仍然没有明确指出问题所在以及你想做什么。您是否希望每页显示一个从internet下载时显示的图像?@androiddeveloper抱歉我的错误,我是一个初学者。是的,我想使用viewpaper指示器库在每页中显示不同的图像,只显示,不下载。如果一切都是本地的,为什么有名为LoadImageFromWebOperations的URL和函数?无论如何,如果文件在应用程序中,您可以使用getIdentifier,如下所示:然后调用getResources.getDrawable。。。你从中得到了什么。