使用 ImageLoad (Android) 下载图像后下载 URL

Download URL after download image with ImageLoad (Android)

我在 Android

上有问题

我在数据库中保存了一些图片url。我想下载图像以查看 viewpager。当我有 URL 时,我将使用 ImageLoader 下载图像。

当我想从服务器下载 URL 图片时出现问题。我正在使用 Asyntask 但不知何故应用程序失败了。

如何下载 URL 以便稍后使用 ImageLoader 下载图像?

我留下了我正在使用的部分代码。

package com.cinemappstop;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.cinemappstop.libraries.UserFunctions;
import com.cinemappstop.utils.Utils;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;


public class ActivityGallery extends SherlockFragmentActivity {



    // Create instance of list and ListAdapter
    ListView list;
    ProgressDialog pDialog;
    LinearLayout lytRetry;

    private ViewPager pager;
    private DisplayImageOptions options;

    // Array to url of my images
    String[] actorImages;
    // Create an instance of ActionBar
    ActionBar actionbar;

    private int intLengthData;
    String mIdActor ;
    // Declare object of JSONObject class
    JSONObject json;

    Context context;

    public String[] mImage;
    ImagePagerAdapter sla; 
    // Declare object of userFunctions and Utils class
    UserFunctions userFunction;
    Utils utils;

    private ImageLoader imageLoader;
    DetailOnPageChangeListener listener;
    /* String[] imageUrls = {
            "http://4.bp.blogspot.com/-dCQSa1pig0M/TgbxHWWS2zI/AAAAAAAAABk/Rtnv6PyXYqI/s748/5.jpg",
            "http://static.yousaytoo.com/post_images/de/38/50/1198542/remote_image_1326117775.jpg",
            "http://im1.indiancolleges.com/uploaded_images/article/CBSE-12-resultsIC_348X264.jpg",
            "http://thumbnail.craftkeys.com/t/336x280/f05af81c9d3c71046c07e138756c8ab885d3d74e.jpg",
            "http://4.bp.blogspot.com/--2tylWQhA6Y/TY920P3ivyI/AAAAAAAAACo/pI9kArldvm0/s1600/Wearable_Technology%2528GtuGuru%2529.jpg",

            "http://1.bp.blogspot.com/-gPY9kcs7w9w/T9W3W62TaSI/AAAAAAAAAM8/nEXldUDIJhc/s1600/gtu-mca-android-tutorial-logo-four.jpg",

            "http://gtu-mca.weebly.com/uploads/9/1/5/6/9156517/8037790_orig.png",
            "http://gtu-mca.weebly.com/uploads/9/1/5/6/9156517/_6068527.png",
            "http://gtu-mca.weebly.com/uploads/9/1/5/6/9156517/3898239.png",
            "http://4.bp.blogspot.com/-tXQSSpN5z8o/TfdJViDk9XI/AAAAAAAAAAY/LbY0hbrezKU/s1600/mcahelp.bmp",
            "http://i.ytimg.com/vi/yeWf4zvxRTo/0.jpg",
            "http://english.globalgujaratnews.com/uploads/news/09_2012/1348840805_ADMISSION_STUDENTS.jpg" };
    */


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);

        context = this;

        // Get id actor to download images
        Intent i = getIntent();  
        mIdActor = i.getStringExtra("idActor");
        new downLoadUrl().execute();

        imageLoader = ImageLoader.getInstance();
        imageLoader.init(ImageLoaderConfiguration.createDefault(context));
        options = new DisplayImageOptions.Builder()
                .showImageForEmptyUri(R.drawable.ic_launcher).cacheOnDisc()
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT).build();

        pager = (ViewPager) findViewById(R.id.view_pager);
        pager.setAdapter(new ImagePagerAdapter(actorImages));
        listener = new DetailOnPageChangeListener();
        pager.setOnPageChangeListener(listener);


    }

    public void btnClick(View view) {
        Toast.makeText(ActivityGallery.this,
                "Current Page :: " + listener.getCurrentPage(),
                Toast.LENGTH_LONG).show();
        System.out.println(">>>>>>>>>>>>>>>>>>>>>" + listener.getCurrentPage());
    }

    public class DetailOnPageChangeListener extends
            ViewPager.SimpleOnPageChangeListener {

        private int currentPage;

        @Override
        public void onPageSelected(int position) {

            currentPage = position;
        }

        public int getCurrentPage() {
            return currentPage;
        }
    }


    @Override
    protected void onStop() {
        imageLoader.stop();
        super.onStop();
    }


    private class ImagePagerAdapter extends PagerAdapter {

        private String[] images;
        private LayoutInflater inflater;

        ImagePagerAdapter(String[] images) {
            this.images = images;
            inflater = getLayoutInflater();
        }

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

        @Override
        public void finishUpdate(View container) {
        }

        @Override
        public int getCount() {
            return images.length;
        }

        @Override
        public Object instantiateItem(View view, int position) {
            final View imageLayout = inflater.inflate(
                    R.layout.item_pager_image, null);
            final ImageView imageView = (ImageView) imageLayout
                    .findViewById(R.id.image);


            imageLoader.displayImage(images[position], imageView, options,
                    new ImageLoadingListener() {
                        @Override
                        public void onLoadingFailed(FailReason failReason) {
                            String message = null;
                            switch (failReason) {
                            case IO_ERROR:
                                message = "Input/Output error";
                                break;
                            case OUT_OF_MEMORY:
                                message = "Out Of Memory error";
                                break;
                            case UNKNOWN:
                                message = "Unknown error";
                                break;
                            }
                            Toast.makeText(ActivityGallery.this, message,
                                    Toast.LENGTH_SHORT).show();


                            imageView
                                    .setImageResource(android.R.drawable.ic_delete);
                        }

                        @Override
                        public void onLoadingComplete(Bitmap loadedImage) {
                            Animation anim = AnimationUtils.loadAnimation(
                                    ActivityGallery.this, R.anim.fade_in);
                            imageView.setAnimation(anim);
                            anim.start();
                        }

                        @Override
                        public void onLoadingCancelled() {
                            // Do nothing
                        }

                        @Override
                        public void onLoadingStarted() {
                            // TODO Auto-generated method stub

                        }
                    });

            ((ViewPager) view).addView(imageLayout, 0);
            return imageLayout;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view.equals(object);
        }

        @Override
        public void restoreState(Parcelable state, ClassLoader loader) {
        }

        @Override
        public Parcelable saveState() {
            return null;
        }

        @Override
        public void startUpdate(View container) {
        }
    }


    // Load first 10 videos
    private class downLoadUrl extends AsyncTask<Void, Void, Void> {


        @Override
        protected void onPreExecute() {
             // Showing progress dialog before sending http request
            pDialog = new ProgressDialog(
                    context);
            pDialog.setMessage("Buscando...");
            pDialog.setIndeterminate(true);
            pDialog.setCancelable(false);
            pDialog.show();

        }

        protected Void doInBackground(Void... unused) {
            // Call method getDataFromServer
                getDataUrlFromServer();
                return (null);
            }

            protected void onPostExecute(Void unused) {

                // Closing progress dialog
                pDialog.dismiss();

            }

        }


    // Method get data from server
    public void getDataUrlFromServer(){

        try {

            Log.d("Value idActor", mIdActor);
            json = userFunction.searchImageActor(mIdActor);


            if(json != null){

                JSONArray dataLocationArray = 
                        json.getJSONArray(userFunction.array_list_actor_images);

                intLengthData = dataLocationArray.length();

                actorImages = new String[intLengthData];            

                // Store data to variable array
                for (int i = 0; i < intLengthData; i++) {
                    JSONObject locationObject = dataLocationArray.getJSONObject(i);


                    actorImages[i] = userFunction.URLImagesActor + locationObject.getString(userFunction.key_images_actor);

                }
             }


         } catch (JSONException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
             Log.d("NULO", "Null");
         }      
    }

}

logCat。有时它会失败并且不显示任何消息

07-27 09:55:51.806: I/MemoryCache(10592): cache size=4916800 length=3
07-27 09:55:52.576: D/dalvikvm(10592): GC_FOR_ALLOC freed 10842K, 47% free 16309K/30672K, paused 31ms, total 31ms
07-27 09:55:52.696: I/MemoryCache(10592): cache size=7060800 length=4
07-27 09:55:52.946: I/MemoryCache(10592): cache size=8980800 length=5
07-27 09:55:53.366: D/dalvikvm(10592): GC_FOR_ALLOC freed 180K, 34% free 20251K/30672K, paused 24ms, total 24ms
07-27 09:55:53.386: I/MemoryCache(10592): cache size=10900800 length=6
07-27 09:55:54.316: I/MemoryCache(10592): cache size=13044800 length=7
07-27 09:55:55.616: D/Valor id_actor(10592): 11
07-27 09:55:55.616: D/Valor id_actor(10592): 11
07-27 09:55:55.816: D/Click(10592): id_actor
07-27 09:55:55.886: D/Value idActor(10592): 11
07-27 09:55:55.886: W/dalvikvm(10592): threadid=11: thread exiting with uncaught exception (group=0x415f68b0)
07-27 09:55:55.886: E/AndroidRuntime(10592): FATAL EXCEPTION: AsyncTask #1
07-27 09:55:55.886: E/AndroidRuntime(10592): java.lang.RuntimeException: An error occured while executing doInBackground()
07-27 09:55:55.886: E/AndroidRuntime(10592):    at android.os.AsyncTask.done(AsyncTask.java:299)
07-27 09:55:55.886: E/AndroidRuntime(10592):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
07-27 09:55:55.886: E/AndroidRuntime(10592):    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
07-27 09:55:55.886: E/AndroidRuntime(10592):    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
07-27 09:55:55.886: E/AndroidRuntime(10592):    at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:230)
07-27 09:55:55.886: E/AndroidRuntime(10592):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
07-27 09:55:55.886: E/AndroidRuntime(10592):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
07-27 09:55:55.886: E/AndroidRuntime(10592):    at java.lang.Thread.run(Thread.java:841)
07-27 09:55:55.886: E/AndroidRuntime(10592): Caused by: java.lang.NullPointerException
07-27 09:55:55.886: E/AndroidRuntime(10592):    at com.cinemappstop.ActivityGallery.getDataUrlFromServer(ActivityGallery.java:285)
07-27 09:55:55.886: E/AndroidRuntime(10592):    at com.cinemappstop.ActivityGallery$downLoadUrl.doInBackground(ActivityGallery.java:265)
07-27 09:55:55.886: E/AndroidRuntime(10592):    at com.cinemappstop.ActivityGallery$downLoadUrl.doInBackground(ActivityGallery.java:1)
07-27 09:55:55.886: E/AndroidRuntime(10592):    at android.os.AsyncTask.call(AsyncTask.java:287)
07-27 09:55:55.886: E/AndroidRuntime(10592):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
07-27 09:55:55.886: E/AndroidRuntime(10592):    ... 4 more
07-27 09:55:55.896: D/AndroidRuntime(10592): Shutting down VM
07-27 09:55:55.896: W/dalvikvm(10592): threadid=1: thread exiting with uncaught exception (group=0x415f68b0)
07-27 09:55:55.896: I/Process(10592): Sending signal. PID: 10592 SIG: 9

解决方案

package com.cinemappstop;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.cinemappstop.libraries.UserFunctions;
import com.cinemappstop.utils.Utils;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;


public class ActivityGallery extends SherlockFragmentActivity {



    // Create instance of list and ListAdapter
    ListView list;
    ProgressDialog pDialog;
    LinearLayout lytRetry;

    private ViewPager pager;
    private DisplayImageOptions options;

    // Array to url of my images
    String[] actorImages;
    // Create an instance of ActionBar
    ActionBar actionbar;
    String name;
    private int intLengthData;
    String mIdActor ;
    // Declare object of JSONObject class
    JSONObject json;

    Context context;

    public String[] mImage;
    ImagePagerAdapter sla; 
    // Declare object of userFunctions and Utils class
    UserFunctions userFunction;
    Utils utils;

    private ImageLoader imageLoader;
    DetailOnPageChangeListener listener;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);

        context = this;

        // Get id actor to download images
        Intent i = getIntent();  
        mIdActor = i.getStringExtra("idActor");
        name = i.getStringExtra("name");

        // Declare object of userFunctions class
        userFunction = new UserFunctions();

        new downLoadUrl().execute();




    }

    public void btnClick(View view) {
        Toast.makeText(ActivityGallery.this,
                "Current Page :: " + listener.getCurrentPage(),
                Toast.LENGTH_LONG).show();
        System.out.println(">>>>>>>>>>>>>>>>>>>>>" + listener.getCurrentPage());
    }

    public class DetailOnPageChangeListener extends
            ViewPager.SimpleOnPageChangeListener {

        private int currentPage;

        @Override
        public void onPageSelected(int position) {

            currentPage = position;
        }

        public int getCurrentPage() {
            return currentPage;
        }
    }


    @Override
    protected void onStop() {
        imageLoader.stop();
        super.onStop();
    }


    private class ImagePagerAdapter extends PagerAdapter {

        private String[] images;
        private LayoutInflater inflater;

        ImagePagerAdapter(String[] images) {
            this.images = images;
            inflater = getLayoutInflater();
        }

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

        @Override
        public void finishUpdate(View container) {
        }

        @Override
        public int getCount() {
            return images.length;
        }

        @Override
        public Object instantiateItem(View view, int position) {
            final View imageLayout = inflater.inflate(
                    R.layout.item_pager_image, null);
            final ImageView imageView = (ImageView) imageLayout
                    .findViewById(R.id.image);


            imageLoader.displayImage(images[position], imageView, options,
                    new ImageLoadingListener() {
                        @Override
                        public void onLoadingFailed(FailReason failReason) {
                            String message = null;
                            switch (failReason) {
                            case IO_ERROR:
                                message = "Input/Output error";
                                break;
                            case OUT_OF_MEMORY:
                                message = "Out Of Memory error";
                                break;
                            case UNKNOWN:
                                message = "Unknown error";
                                break;
                            }
                            Toast.makeText(ActivityGallery.this, message,
                                    Toast.LENGTH_SHORT).show();


                            imageView
                                    .setImageResource(android.R.drawable.ic_delete);
                        }

                        @Override
                        public void onLoadingComplete(Bitmap loadedImage) {
                            Animation anim = AnimationUtils.loadAnimation(
                                    ActivityGallery.this, R.anim.fade_in);
                            imageView.setAnimation(anim);
                            anim.start();
                        }

                        @Override
                        public void onLoadingCancelled() {
                            // Do nothing
                        }

                        @Override
                        public void onLoadingStarted() {
                            // TODO Auto-generated method stub

                        }
                    });

            ((ViewPager) view).addView(imageLayout, 0);
            return imageLayout;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view.equals(object);
        }

        @Override
        public void restoreState(Parcelable state, ClassLoader loader) {
        }

        @Override
        public Parcelable saveState() {
            return null;
        }

        @Override
        public void startUpdate(View container) {
        }
    }


    // Load first 10 videos
    private class downLoadUrl extends AsyncTask<Void, Void, Void> {


        @Override
        protected void onPreExecute() {
             // Showing progress dialog before sending http request
            pDialog = new ProgressDialog(
                    context);
            pDialog.setMessage("Buscando...");
            pDialog.setIndeterminate(true);
            pDialog.setCancelable(false);
            pDialog.show();

        }

        protected Void doInBackground(Void... unused) {
            // Call method getDataFromServer
                getDataUrlFromServer();
                return (null);
            }

            protected void onPostExecute(Void unused) {

                // Closing progress dialog
                pDialog.dismiss();

                imageLoader = ImageLoader.getInstance();
                imageLoader.init(ImageLoaderConfiguration.createDefault(context));
                options = new DisplayImageOptions.Builder()
                        .showImageForEmptyUri(R.drawable.ic_launcher).cacheOnDisc()
                        .imageScaleType(ImageScaleType.IN_SAMPLE_INT).build();

                pager = (ViewPager) findViewById(R.id.view_pager);
                pager.setAdapter(new ImagePagerAdapter(actorImages));
                listener = new DetailOnPageChangeListener();
                pager.setOnPageChangeListener(listener);

            }

        }


    // Method get data from server
    public void getDataUrlFromServer(){

        try {

            Log.d("Value idActor", mIdActor);
            json = userFunction.searchImageActor(mIdActor);


            if(json != null){

                JSONArray dataLocationArray = 
                        json.getJSONArray(userFunction.array_list_actor_images);

                intLengthData = dataLocationArray.length();
                Log.d("Valor json", String.valueOf(intLengthData));
                actorImages = new String[intLengthData];            

                // Store data to variable array
                for (int i = 0; i < intLengthData; i++) {
                    JSONObject locationObject = dataLocationArray.getJSONObject(i);


                    actorImages[i] = userFunction.URLImagesActor + locationObject.getString(userFunction.key_images_actor);

                }
             }


         } catch (JSONException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
             Log.d("NULO", "Null");
         }      
    }

}

您似乎忘记初始化 UserFunctions userFunction,因此在 getDataUrlFromServer()

中调用 userFunction.searchImageActor(mIdActor) 时出现 NullPointerException