2014-01-22 23 views
0

問題是,當我設置爲自定義適配器getView功能異步下載任務,其返回不能引用異步任務自定義適配器

ImageLoader的不能被解析爲一個類型

錯誤。該類在同一個項目的不同包中,通常可以導入,但在這種情況下它只顯示錯誤。如何解決這個問題?感謝您的幫助

LeadersAdapter.java

public class LeadersAdapter extends ArrayAdapter<Record> { 


    public LeadersAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    } 

    public LeadersAdapter(Context context, int resource, List<Record> items) { 
     super(context, resource, items); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View v = convertView; 

     if (v == null) { 

      LayoutInflater vi; 
      vi = LayoutInflater.from(getContext()); 
      v = vi.inflate(R.layout.leader_record_row, null); 

     } 

     Record p = getItem(position); 

     if (p != null) { 

      ImageView pic = (ImageView) v.findViewById(R.id.profile_pic); 
      TextView name = (TextView) v.findViewById(R.id.name); 
      TextView pts = (TextView) v.findViewById(R.id.pts); 

      new ImageLoader().execute(pic,p.url); 
      name.setText(p.name); 
      pts.setText(p.pts); 
     } 

     return v; 

    } 
} 

ImageLoader.java

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

import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.widget.ImageView; 

class ImageLoader extends AsyncTask<Object, Void, Bitmap> { 

    private static String TAG = "ImageLoader"; 
    public InputStream input; 
    public ImageView view; 
    public String imageURL; 

    public ImageLoader(String text){ 

    } 

    @Override 
    protected Bitmap doInBackground(Object... params) { 
     try { 

      view = (ImageView) params[0]; 
      imageURL = (String) params[1]; 

      URL url = new URL(imageURL); 
      HttpURLConnection connection = (HttpURLConnection) url 
        .openConnection(); 
      connection.setDoInput(true); 
      connection.connect(); 
      input = connection.getInputStream(); 
      Bitmap myBitmap = BitmapFactory.decodeStream(input); 
      return myBitmap; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return null; 
     } finally { 
      try { 
       input.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 

    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     if (result != null && view != null) { 
      view.setImageBitmap(result); 
     } 
    } 
} 
+0

你有一個構造函數PARAM'公共ImageLoader的(字符串文本){ }'。但是你有'新的ImageLoader()。execute(pic,p.url)''。應該是'new ImageLoader(「something」)。execute(pic,p.url)'。還要考慮使用uil或picasso進行延遲加載 – Raghunandan

回答

1

ImageLoader類(沒有被定義爲public)使用默認訪問修飾符,package-private,所以它是隻在它自己的包中可見。

更改...

class ImageLoader [...]

到...

public class ImageLoader [...]

應該解決您的訪問性問題。

此外,我強烈建議您查看現有的圖像加載庫(如Universal Image Loader)而不是自己烘焙。

0

我推薦Square的Picasso lib,它很容易使用。

簡單的一行將圖像從web加載到ImageView中。

例:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);