0
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();

这里调用了测试异步任务

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


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

这里 imageDownload asynctask 被调用::

    new ImageDownload().execute();

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

在 ImageDownload 在测试异步任务完成之前开始执行之前

而且我无法获得任务的状态你能告诉它是如何完成的吗

4

4 回答 4

1

无论我从中了解到什么,你都想在任务线程之后执行你的 ImageDownload 线程,所以从你的任务线程的 onPostExecute() 启动 ImageDownload 线程

于 2014-03-20T12:03:01.950 回答
0

执行异步任务时,会启动一个新线程,但您当前的线程会继续运行。它在启动 test.async 后立即运行到您的 thread.sleep(1000)。

看起来您在 test.async 中进行了一些互联网下载,并且您可能已经猜到,它需要的时间超过 1000 毫秒(1 秒)。这意味着 1 秒后,您的另一个异步开始,在第一个完成之前。

我假设你想错开它们。在第一个异步的 postExecute 中,您可以生成第二个异步。一种风格更正确的方法是在您的活动上实现一个接口,该接口在异步完成时接受回调,然后在收到回调后,启动您的第二个异步。

下面是如何构建它的示例。

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();
}

}

于 2014-03-20T12:04:56.413 回答
0

随着时间的推移,Android 处理并发运行的 AsyncTask 的方式发生了一些变化。在非常旧的 Android 版本(1.6 之前的 afaik)中,多个 AsyncTask 按顺序执行。该行为已更改为并行运行 AsyncTasks,直到 Android 2.3。从 Android 3.0 开始,Android 团队认为人们对同步并行运行的任务不够谨慎,并将默认行为切换回顺序执行。AsyncTask 在内部使用 ExecutionService,可以根据需要配置为按顺序(默认)或并行运行:

ImageLoader imageLoader = new ImageLoader( imageView );
imageLoader.executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR, "http://url.com/image.png"    );
于 2014-03-24T09:05:34.030 回答
0

看看这里,这对我有同样的帮助..将您的 url 传递给并在数组GetTemplateImageController中获取结果Bitmap

GetTemplateImageController 类:

 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();

            //}
        }
    }

服务处理程序类:

    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;
        }
}
于 2014-03-20T12:09:46.290 回答