AsyncTask-这个类型参数有什么问题?

Sol*_*ace 0 android android-asynctask

这是我写的第一个使用AsyncTask练习的程序.我没有解决这个错误,我试图做一些建议的修复,但这带来了前一行的错误.所以如果有人能告诉我这里有什么问题以及如何解决这个问题,我将感激不尽.

package com.example.concurrency;

import java.io.InputStream;
import java.net.URL;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ImageView;

public class UsingAsyncTask extends Activity {
    ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.using_asynctask); 
        String spec="http://www.google.com/imgres?imgurl=http%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2F7%2F7a%2FBasketball.png&imgrefurl=http%3A%2F%2Fcommons.wikimedia.org%2Fwiki%2FFile%3ABasketball.png&h=340&w=340&tbnid=EJmjEDyJzrhAuM%3A&zoom=1&docid=C_hn8nOgsGmuwM&hl=en&ei=Q0o2U93LNcaIygH4mICQBQ&tbm=isch&ved=0CHwQhBwwBg&iact=rc&dur=3875&page=1&start=0&ndsp=14";
        try {URL params= new URL(spec);} catch(Exception e) {}
        Bitmap result;
        new MyTask().execute(params);// ERROR:***** params cannot be resolved to a variable*************
        imageView= new ImageView(null);
    }

    private class MyTask extends AsyncTask<URL, Void, Bitmap> {

        private Bitmap loadImageFromNetwork(String url){
            try {
            Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(url).getContent());
            return bitmap;
            } catch (Exception e) {
            e.printStackTrace();
            }
            return null;
        }

        protected void onPreExecute() {

        }

        protected Bitmap doInBackground(String... params){
            //if(isCancelled()) return;
            String url=params.toString();
            final Bitmap bitmap= loadImageFromNetwork(url);
            return bitmap;
        }

        /*protected void onProgressUpdate(Progress progress){
            setProgressPercent(progress[0]);
        }*/

        protected void onPostExecute(Bitmap result){
            imageView.setImageBitmap(result);
        }

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

}
Run Code Online (Sandbox Code Playgroud)

小智 5

try {URL params= new URL(spec);}
Run Code Online (Sandbox Code Playgroud)

如果你创建这样的变量params,它只存在于try-catch块的范围内.因此,当您执行asyncTask时,无法识别.做这样的事情:

   URL params;
   try {
     params = new URL(spec);
   }
Run Code Online (Sandbox Code Playgroud)

同样在编写上面的代码时,asyncTask期望String作为第一个参数(asyncTask的第一个参数是你收到的doInBackground参数).将doInBackground更改为:

protected Bitmap doInBackground(URL... params)
Run Code Online (Sandbox Code Playgroud)

然后,通过调用params [0]获取您的参数(因为语句"URL ..."表示未知大小的URL数组).