Pergunta

public class DetailsActivity extends Activity {

private ArrayAdapter<Imageclass> adapter;
ArrayList<String> imageselect = new ArrayList<String>();
private ArrayList<Imageclass> array1;
private ArrayList<Imageclass> list = new ArrayList<Imageclass>();
//private ArrayList<Imageclass> array;
ArrayList<String> imagetest = new ArrayList<String>();
private TextView textView1; 
private TextView textView2;
private TextView textView3;
private TextView textView4;
private TextView textView5;
int id;
int pid;
int val;
int val_new;
double lati;
double longi;
String imagename;
//private ImageView image;
//public static final String URL = "http://theopentutorials.com/totwp331/wp-content/uploads/totlogo.png";
ImageView image;
static Bitmap bm;
ProgressDialog pd;


BitmapFactory.Options bmOptions;

public class test extends AsyncTask<Void, Void, InputStream>{

    ArrayList<Imageclass> str;

    private DetailsActivity activity;


    public test(DetailsActivity activity){
        this.activity = activity;
    }


    @Override
    protected InputStream doInBackground(Void... params) {

        //String stringURL = "http://192.168.2.104:8088/Image/MyImage" + String.format("?id=%d",id); 
        Log.e("Checking id",""+id);

        String stringURL = "http://megavenues.org/mobile_json/get_images" + String.format("?id=%d",id);
        URL url; 
        try {
            stringURL=stringURL.replaceAll(" ", "%20");

            url = new URL(stringURL);
            Log.e("URL",""+ url); 

            URLConnection conn= url.openConnection();

            Log.e("URLConnection",""+conn );
            InputStream stream= conn.getInputStream(); 

            Log.e("URLStream",""+stream );

            return stream; 
        } catch (MalformedURLException e) { 

            e.printStackTrace();
        } catch (IOException e) {

            Log.e("Excepiton", ""+e);
            e.printStackTrace();
        }
        return null;
    }       

    @Override
    protected void onPostExecute(InputStream result) {
        super.onPostExecute(result);
        Log.e("Result", ""+result);
        StringBuilder builder = new StringBuilder();
        Log.e("Builder", ""+ builder);
        BufferedReader reader = new BufferedReader(new InputStreamReader(result));
        Log.e("Reader", ""+ reader);

        String line = null;
        try {
            while((line = reader.readLine()) != null) {
                Log.e("Result11", ""+ builder.append(line));
                builder.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }


        String jsonString = builder.toString();
        Log.e("image", jsonString);

        try {

            JSONObject rootObject = new JSONObject(jsonString);
            Log.e("JSOnObject",""+ rootObject);
            JSONArray jsonArray = rootObject.getJSONArray("tbl_ads_images");        
            //array1.clear();
            ArrayList<String> imagearray = new ArrayList<String>();
            for (int index = 0; index < jsonArray.length(); index++) {
                Imageclass imageinstance = new Imageclass(); 

                JSONObject object = (JSONObject) jsonArray.get(index);
                Log.e("Image test", "" + object);
                imageinstance.image = object.getString("file_name");

                //### this contain the image name
                Log.e("Imageinstance.image",""+imageinstance.image);

                imagename = imageinstance.image;
                imagearray.add(imageinstance.image);


                array1.add(imageinstance);
                //array1.add(imagearray);
                Log.e("array1","test"+array1);
            }
            Log.e("IMAGES",""+array1);
            activity.setlist(array1);


        }       
        catch (JSONException e) {
            Log.e("this Exception",""+ e);
            e.printStackTrace();
        }
        catch (Exception e) {
            Log.e("NULL","NULL"+e);
        }

        //  adapter.notifyDataSetChanged();


    }

}

public class ImageDownload extends AsyncTask<String, Void, String> {

    protected String doInBackground(String... param) {
        bmOptions = new BitmapFactory.Options();
        bmOptions.inSampleSize = 1;

        String imageUrl ="http://megavenues.com/assets/uploads/users/"+val+"/ads/thumbnail/"+Finalname;
        Log.e("inside img",""+Finalname);
        Log.e("inside img_val",""+val);
        Log.e("Check","check"+imageUrl);
        loadBitmap(imageUrl, bmOptions);
        return imageUrl;
    }

    protected void onPostExecute(String imageUrl) {
        pd.dismiss();
        if (!imageUrl.equals("")) {
            Log.e("Test","Test"+ imageUrl.equals(""));
            image.setImageBitmap(bm);
        } else {
            Toast.makeText(DetailsActivity.this,
                    "test", Toast.LENGTH_LONG)
                    .show();
        }
    }

}

public static Bitmap loadBitmap(String URL, BitmapFactory.Options options) {
    InputStream in = null;
    try {
        in = OpenHttpConnection(URL);
        bm = BitmapFactory.decodeStream(in, null, options);
        in.close();
    } catch (IOException e1) {
    }
    return bm;
}

private static InputStream OpenHttpConnection(String strURL)
        throws IOException {
    InputStream inputStream = null;
    URL url = new URL(strURL);
    URLConnection conn = url.openConnection();

    try {
        HttpURLConnection httpConn = (HttpURLConnection) conn;
        httpConn.setRequestMethod("GET");
        httpConn.connect();

        if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
            inputStream = httpConn.getInputStream();
        }
    } catch (Exception ex) {
    }
    return inputStream;
}

String Finalname;

//String imageUrl ="http://megavenues.com/assets/uploads/users/220/ads/thumbnail/"+Finalname;
public void setlist(ArrayList<Imageclass> list)
{
    this.list= list; 
    Log.e("LIST",""+ this.list);
    String imagename1 = list.toString();
    Log.e("image new value",""+imagename1);
    this.list= list; 
    Log.e("testing",""+ this.list); 
    for (int i=0; i < list.size(); i++)
    { 
        Log.e("new check",""+list.get(i));
        //String test2= list.get(i).toString();
        imagetest.add(list.get(i).toString());  
        Finalname = list.get(i).toString();
        getimage_name(Finalname);
        Log.e("Come",""+list.get(i).toString());
        Log.e("Finalname",""+Finalname);
    }
}
//String imageUrl ="http://megavenues.com/assets/uploads/users/"+val+"/ads/thumbnail/"+Finalname;

private void getimage_name(String finalname2) {


}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_details);
    image = (ImageView)findViewById(R.id.imageView2);


    //  getMenuInflater().inflate(R.menu.details);
    //R.id.textDetailPlace 
    textView1 = (TextView)findViewById(R.id.textDetailPlace);
    textView2 = (TextView)findViewById(R.id.textDetailAddress ); 
    textView3 = (TextView)findViewById(R.id.textCapacity);
    //  textView4 = (TextView)findViewById(R.id.textDetailContactNo);
    textView5 = (TextView) findViewById(R.id.textViewDescription);


    textView1.setText(getIntent().getExtras().getString("test"));
    textView2.setText(getIntent().getExtras().getString("test2"));
    textView3.setText(getIntent().getExtras().getString("test3"));
    //textView4.setText(getIntent().getExtras().getString("test4"));
    textView5.setText(getIntent().getExtras().getString("test5"));

    id = getIntent().getExtras().getInt("test6");
    Log.e("ID value",""+id);

    pid = getIntent().getExtras().getInt("test7");
    Log.e("PID value",""+pid);

    lati = getIntent().getExtras().getDouble("testlat");
    Log.e("long",""+lati);
    longi = getIntent().getExtras().getDouble("testlong");
    Log.e("long",""+longi);
    val=pid;
    Log.e("val",""+val);
    ActionBar actionBar = getActionBar();
    actionBar.hide();
    pd = ProgressDialog.show(DetailsActivity.this, null, null,true);
    pd.setContentView(R.layout.progress);
    array1 = new ArrayList<Imageclass>();
    //new test(this).execute();

    new test(this).execute();

here test asynctask is called

    Log.e("JUST","CHECK");
    Log.e("JUST","CHECK");


    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

here imageDownload asynctask is getting called::

    new ImageDownload().execute();

        Log.e("imagename",""+imagename);
}
}

here before ImageDownload is start executing before test async task is complete

and i am not able to get the status of the task can u tell how it is done

Foi útil?

Solução 4

Over time there have been several changes to the way Android deals with AsyncTasks that run concurrently. In very old Android versions (pre-1.6 afaik) multiple AsyncTasks were executed in sequence. That behavior has been changed to run the AsyncTasks in parallel up until Android 2.3. Beginning with Android 3.0 the the Android team decided that people were not careful enough with synchronizing the tasks that run in parallel and switched the default behavior back to sequential execution. Internally the AsyncTask uses an ExecutionService that can be configured to run in sequence (default) or in parallel as required:

ImageLoader imageLoader = new ImageLoader( imageView );
imageLoader.executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR, "http://url.com/image.png"    );

Outras dicas

whatever i understood from this you want to execute your ImageDownload thread after the task thread,so start the ImageDownload Thread from the onPostExecute() of your task thread

When executing an async task a new thread is started, but your current thread keeps running. It immediately runs into your thread.sleep(1000) just after starting test.async.

It looks like your doing some internet downloading in test.async, and as you might have guessed, it takes longer than 1000 milliseconds (1 second). This means 1 second later, your other async is starting, before the first completed.

I assume you want to stagger them. In the postExecute of the first async, you can spawn the second async. A more stylistically correct method would be to implement an interface on your activity that takes a callback on Async completion, then upon receiving the call back, launch your second async.

An example of how to structure this is below.

interface AsyncCallback{
void onAsyncComplete();
}

public class ExampleActivity extends Activity implements AsyncCallback {

....

public void launchFirstAsync(){
    new Task(this).execute();
}


@Override
public void onAsyncComplete() {
    //todo launch second asyncTask;

   }
}

class Task extends AsyncTask<Void, Void, Void>{

AsyncCallback cb;

Task(AsyncCallback cb){
    this.cb = cb;
}

@Override
protected Void doInBackground(Void... params) {
    // TODO Auto-generated method stub
    return null;
}

@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub
    super.onPreExecute();

    cb.onAsyncComplete();
}

}

Have a look here, This Help me for same..Pass your url to GetTemplateImageController and get the result in Bitmap array

GetTemplateImageController Class:

 public class GetTemplateImageController  extends AsyncTask<String, Void, Bitmap[]>
    {
        Context mcontext;
        private ProgressDialog pDialog;
        public static  String[] imageurls;
        public static Bitmap bm[]=new Bitmap[15];
        // URL to get JSON
        private static final String url= "http://xxx.xxx.xxx.xxx/image_master.php?";
        private static final String TEMPLATE = "Template_images";
        private static final String IMAGEURLS = "tempimagename";
        // JSONArray
        JSONArray loginjsonarray=null;
        //result from url
        public GetTemplateImageController(Context c) {
            this.mcontext=c;
        }
        protected void onPreExecute() {
            // Showing progress dialog
            super.onPreExecute();
            pDialog=new ProgressDialog(mcontext);
            pDialog.setMessage("Loading");
            pDialog.setCancelable(true);
            pDialog.setIndeterminate(true);
            pDialog.show();
        }
        protected Bitmap[] doInBackground(String... arg) {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("templateMasterId",arg[0].toString()));
            // Creating service handler class instance
            ServiceHandler sh = new ServiceHandler();
             // Making a request to url and getting response
            String jsonstr = sh.makeServiceCall(url, ServiceHandler.POST, params);
            Log.d("Response: ", ">"+jsonstr);
            if(jsonstr!=null)
            {
            try {
                JSONObject jsonObj =new JSONObject(jsonstr);
                loginjsonarray=jsonObj.getJSONArray(TEMPLATE);
                imageurls=new String[loginjsonarray.length()];
                for(int i=0;i<loginjsonarray.length();i++)
                {
                JSONObject l=loginjsonarray.getJSONObject(i);
                imageurls[i]=l.getString(IMAGEURLS);
                }
                for(int i=0;i<imageurls.length;i++){    
                 bm[i]=DownloadImage(imageurls[i]);
                }
                }catch(JSONException e){
                e.printStackTrace();
                }
              }else{
                Toast.makeText(mcontext,"Check your Internet Connection",Toast.LENGTH_SHORT).show();
              }
                return bm;
           }
        public Bitmap DownloadImage(String STRURL) {
            Bitmap bitmap = null;
            InputStream in = null;       
            try {
                int response = -1;
                URL url = new URL(STRURL);
                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();
                }                    
                }catch(Exception ex) {
                throw new IOException("Error connecting"); 
                }
                bitmap = BitmapFactory.decodeStream(in);
                in.close();
                }catch (IOException e1) {
                e1.printStackTrace();
                }
                return bitmap; 
            }
        protected void onPostExecute(Integer result) {
            // Dismiss the progress dialog

             pDialog.dismiss();
             if(result != null)
                    Toast.makeText(mcontext,"Download complete", Toast.LENGTH_SHORT).show();

            //}
        }
    }

ServiceHandler Class:

    public class ServiceHandler {
        static String response = null;
        public final static int GET = 1;
        public final static int POST = 2;
        public String makeServiceCall(String url, int method) {
            return this.makeServiceCall(url, method, null);
        }
        /**
         * Making service call
         * @url - url to make request
         * @method - http request method
         * @params - http request params
         * */
        public String makeServiceCall(String url, int method, List<NameValuePair> params)  {
            try {
                    DefaultHttpClient httpClient=new DefaultHttpClient();
                    HttpEntity httpEntity=null;
                    HttpResponse httpResponse=null;
                    // Checking http request method type
                    if(method==POST){
                        HttpPost httpPost=new HttpPost(url);
                        if(params!=null)
                        {
                            //adding post params
                            httpPost.setEntity(new UrlEncodedFormEntity(params));
                        }
                        httpResponse=httpClient.execute(httpPost);
                    }
                    else if(method==GET)
                    {
                        // appending params to url
                        if(params!=null)
                        {
                            String paramString=URLEncodedUtils.format(params, "utf-8");
                            url +="?"+paramString;
                        }
                        HttpGet httpGet=new HttpGet(url);
                        httpResponse=httpClient.execute(httpGet);
                    }
                    httpEntity=httpResponse.getEntity();
                    response=EntityUtils.toString(httpEntity);
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return response;
        }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top