如何从另一个类执行异步方法

时间:2014-09-05 17:58:26

标签: java android android-asynctask

我在这个类中创建了一个异步方法,但是在执行getAllPaintings方法之前我找不到执行它的方法。这是我运行它时的绘画类我在int size = titles.length;上得到错误所以如何执行异步方法。

package com.ITAN.cinematheque.items;

import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;

import com.ITAN.cinematheque.R;
import com.ITAN.cinematheque.activities.MainActivity;
import com.uwetrottmann.tmdb.Tmdb;
import com.uwetrottmann.tmdb.entities.Movie;
import com.uwetrottmann.tmdb.entities.ResultsPage;
import com.uwetrottmann.tmdb.services.MoviesService;

import java.io.IOException;    
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class Painting {

    private final String imageUrl;
    private final String title;
    private final String year;
    private final Double location;
    static List<Movie> mplist;
    static String [] titles;
    static String [] rdate;
    static String [] imageurl;
    static Double [] pop;
    static String Image_Base_Url = "http://image.tmdb.org/t/p/w500/";

    //    String []
    private Painting(String imageUrl, String title, String year, Double location) {

        this.imageUrl = imageUrl;
        this.title = title;
        this.year = year;
        this.location = location;
        //GetXMLTask task = new GetXMLTask();
        // Execute the task
        //task.execute(new String[] {         "http://www.boatshedmarket.com.au/image/data/flowers_img.jpg","http://www.ladybugflorist.com/pictures/home_pic1.jpg","http://www.bitrebels.com/wp-content/uploads/2012/11/electrocuted-flowers-robert-buelteman-7.jpg","http://www.straightbackphysio.co.uk/images/physio-portal/flowers.jpg" });

    }

    public String getImageUrl() {
        return imageUrl;
    }

    public String getTitle() {
        return title;
    }

    public String getYear() {
        return year;
    }

    public Double getLocation() {
        return location;
    }

    public static Painting[] getAllPaintings(Resources res) {
        new showMovieInfo().execute();
       // String[] titles = res.getStringArray(R.array.paintings_titles);
       // String[] years = res.getStringArray(R.array.paintings_years);
       // String[] locations = res.getStringArray(R.array.paintings_locations);
       // TypedArray images = res.obtainTypedArray(R.array.paintings_images);
       // Bitmap bmp = BitmapFactory.decodeResource(res,R.drawable.sunflowers);

       // String[] titles ={"Godzilla","X-Men: Days of Future Past","Neighbors","Divergent","The     Fault in Our Stars","The Amazing Spider-Man 2","The Expendables 3","The Prince","Blended","Guardians of the Galaxy","Frozen","Need for Speed","Noah","Maleficent","Sparks","The Lego Movie","Pretty Baby","Sabotage","Street Fighter: Assassin's Fist"
       // };
       // String[] years ={"Year 1","Year 2","Year 3","Year4"};
       // String[] locations={"Location 1","Location 2","Location 3","Location 4"};
       // String[] images =     {"http://i.imgur.com/DvpvklR.png","http://i.imgur.com/DvpvklR.png","http://i.imgur.com/DvpvklR.png","    http://i.imgur.com/DvpvklR.png"};
       // String[] images = {bmp.toString(), bmp.toString(), bmp.toString(), bmp.toString()};

        int size = titles.length;
        Painting[] paintings = new Painting[size];

        for (int i = 0; i < size; i++) {
           // paintings[i] = new Painting(images.get(i), titles[i], years[i], locations[i]);
           // paintings[i] = new Painting(images.getResourceId(i, -1), titles[i], years[i], locations[i]);
            paintings[i] = new Painting(imageurl[i], titles[i], rdate[i], pop[i]);
        }

        return paintings;
    }
    public static void executeTask()
    {
        new showMovieInfo().execute();
    }

    public static class showMovieInfo extends AsyncTask<Integer,Integer,List<Movie>> {

        protected void onPreExecute(Integer f){
            //setting up variables for whole method
        }

        @Override
        protected List<Movie> doInBackground(Integer... params) {
            Tmdb tmdb = new Tmdb();
            tmdb.setApiKey(MYAPIKEY);
            MoviesService movieService = tmdb.moviesService();
            ResultsPage movie = movieService.popular();//you can use a String[] array at the place of 550.
            //String str = String.valueOf(movie.title);

            //you can create multiple return statements or u can use if else statement for different commands.
            return movie.results;
            ///MenuInflater inflater = new MenuInflater(MainActivity.this);
            //inflater.inflate(android.R.layout.simple_list_item_1, false);


        }
        protected void onProgressUpdated(Integer... progress)
        {

        }
        protected void onPostExecute(final List<Movie> result)
        {

            mplist = new List<Movie>() {
                @Override
                public void add(int location, Movie object) {

                }

                @Override
                public boolean add(Movie object) {
                    return false;
                }

                @Override
                public boolean addAll(int location, Collection<? extends Movie> collection) {
                    return false;
                }

                @Override
                public boolean addAll(Collection<? extends Movie> collection) {
                    return false;
                }

                @Override
                public void clear() {

                }

                @Override
                public boolean contains(Object object) {
                    return false;
                }

                @Override
                public boolean containsAll(Collection<?> collection) {
                    return false;
                }

                @Override
                public boolean equals(Object object) {
                    return false;
                }

                @Override
                public Movie get(int location) {
                    return null;
                }

                @Override
                public int hashCode() {
                    return 0;
                }

                @Override
                public int indexOf(Object object) {
                    return 0;
                }

                @Override
                public boolean isEmpty() {
                    return false;
                }

                @Override
                public Iterator<Movie> iterator() {
                    return null;
                }

                @Override
                public int lastIndexOf(Object object) {
                    return 0;
                }

                @Override
                public ListIterator<Movie> listIterator() {
                    return null;
                }

                @Override
                public ListIterator<Movie> listIterator(int location) {
                    return null;
                }

                @Override
                public Movie remove(int location) {
                    return null;
                }

                @Override
                public boolean remove(Object object) {
                    return false;
                }

                @Override
                public boolean removeAll(Collection<?> collection) {
                    return false;
                }

                @Override
                public boolean retainAll(Collection<?> collection) {
                    return false;
                }

                @Override
                public Movie set(int location, Movie object) {
                    return null;
                }

                @Override
                public int size() {
                    return 0;
                }

                @Override
                public List<Movie> subList(int start, int end) {
                    return null;
                }

                @Override
                public Object[] toArray() {
                    return new Object[0];
                }

                @Override
                public <T> T[] toArray(T[] array) {
                    return null;
                }
            };
            mplist = result;

            String str = String.valueOf(mplist.get(0).release_date);
            String str1 = String.valueOf(mplist.get(1).release_date);
            String str2 = String.valueOf(mplist.get(2).release_date);
            String str3 = String.valueOf(mplist.get(3).release_date);
            String str4 = String.valueOf(mplist.get(4).release_date);
            String str5 = String.valueOf(mplist.get(5).release_date);
            String str6 = String.valueOf(mplist.get(6).release_date);
            String str7 = String.valueOf(mplist.get(7).release_date);
            String str8 = String.valueOf(mplist.get(8).release_date);
            String str9 = String.valueOf(mplist.get(9).release_date);
            String str10 = String.valueOf(mplist.get(10).release_date);
            String str11 = String.valueOf(mplist.get(11).release_date);
            String str12 = String.valueOf(mplist.get(12).release_date);
            String str13 = String.valueOf(mplist.get(13).release_date);
            String str14 = String.valueOf(mplist.get(14).release_date);
            String str15 = String.valueOf(mplist.get(15).release_date);
            String str16 = String.valueOf(mplist.get(16).release_date);
            String str17 = String.valueOf(mplist.get(17).release_date);
            String str18 = String.valueOf(mplist.get(18).release_date);
            String str19 = String.valueOf(mplist.get(19).release_date);




            titles = new String[]{result.get(0).title,result.get(1).title,result.get(2).title,result.get(3).title,result.get(4).title,result.get(5).title,result.get(6).title,result.get(7).title,result.get(8).title,result.get(9).title,result.get(10).title,result.get(11).title,result.get(12).title,result.get(13).title,result.get(14).title,result.get(15).title,result.get(16).title,result.get(17).title,result.get(18).title,result.get(19).title};
            rdate = new String[]{str,str1,str2,str3,str4,str5,str6,str7,str8,str9,str10,str11,str12,str13,str14,str15,str16,str17,str18,str19};
            imageurl = new String[] {Image_Base_Url+result.get(0).poster_path,Image_Base_Url+result.get(1).poster_path,Image_Base_Url+result.get(2).poster_path,Image_Base_Url+result.get(3).poster_path,Image_Base_Url+result.get(4).poster_path,Image_Base_Url+result.get(5).poster_path,Image_Base_Url+result.get(6).poster_path,Image_Base_Url+result.get(7).poster_path,Image_Base_Url+result.get(8).poster_path,Image_Base_Url+result.get(9).poster_path,Image_Base_Url+result.get(10).poster_path,Image_Base_Url+result.get(11).poster_path,Image_Base_Url+result.get(12).poster_path,Image_Base_Url+result.get(13).poster_path,Image_Base_Url+result.get(14).poster_path,Image_Base_Url+result.get(15).poster_path,Image_Base_Url+result.get(16).poster_path,Image_Base_Url+result.get(17).poster_path,Image_Base_Url+result.get(18).poster_path,Image_Base_Url+result.get(19).poster_path};
            pop = new Double[]{result.get(0).popularity,result.get(1).popularity,result.get(2).popularity,result.get(3).popularity,result.get(4).popularity,result.get(5).popularity,result.get(6).popularity,result.get(7).popularity,result.get(8).popularity,result.get(9).popularity,result.get(10).popularity,result.get(11).popularity,result.get(12).popularity,result.get(13).popularity,result.get(14).popularity,result.get(15).popularity,result.get(16).popularity,result.get(17).popularity,result.get(18).popularity,result.get(19).popularity};
            // tv.setText(str);
            //you can use s string array here and use stringarray.add(result) to add multiple items to the array and then you can get those items by using stringarray.get(1).
        }
    }
}

1 个答案:

答案 0 :(得分:0)

由于它是异步的,因此无法保证它会在其余代码之前返回(很可能不会)。因此,您需要运行任务,然后从onPostExecute()调用一个方法,以便在完成后运行您想要运行的所有内容。

因此,无论您在何处运行getAllPaintings (),请调用该方法来运行您的任务,然后从onPostExecute()调用该方法。有太多的代码,我不会展示一个例子,但这应该给你一个想法。