簡體   English   中英

來自網址的圖片位圖

[英]Image Bitmap from URL

我正在嘗試從字符串數組中的URL獲取圖像,我的應用程序崩潰了。 它在第110行崩潰: InputStream input = connection.getInputStream(); 我究竟做錯了什么?

這是我的課:

package kyfb.android.kyfb.com.kyfb;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.media.Image;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

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

/**
 * Created by KFB on 8/12/14.
 */
class ActionAlertsAdapter extends BaseAdapter {
    private LayoutInflater inflater;

    public ActionAlertsAdapter(Context context) {

        inflater = LayoutInflater.from(context);
    }

    public int getCount() {
        // TODO Auto-generated method stub

        return ActionAlertsFragment.title.length;
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder;

        if(convertView == null){
            convertView = inflater.inflate(R.layout.item_feed, null);
            holder = new ViewHolder();
            holder.lytItemFeed = (RelativeLayout) convertView.findViewById(R.id.lytItemFeed);
            holder.txtTitle= (TextView) convertView.findViewById(R.id.txtTitle);
            holder.txtPubDate = (TextView) convertView.findViewById(R.id.txtPubDate);
            holder.thumbnail = (ImageView) convertView.findViewById(R.id.thumbnail);

            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }

        if((position%2)!=0){
            holder.lytItemFeed.setBackgroundColor(Color.TRANSPARENT);
        }else{
            holder.lytItemFeed.setBackgroundColor(Color.TRANSPARENT);
        }

        holder.txtTitle.setText(ActionAlertsFragment.title[position]);
        holder.txtPubDate.setText(ActionAlertsFragment.pubDate[position]);

        Bitmap bitmap = getBitmapFromURL(ActionAlertsFragment.thumb[position]);
        if(bitmap == null) {
            holder.thumbnail.setImageResource(R.drawable.kyfb);
        }
        else {
            holder.thumbnail.setImageBitmap(bitmap);
        }

        holder.txtTitle.setTextColor(Color.WHITE);
        holder.txtPubDate.setTextColor(Color.WHITE);

        return convertView;
    }

    public Bitmap getBitmapFromURL(String imageUrl) {
        try {
            URL url = new URL(imageUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            return myBitmap;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    static class ViewHolder {
        TextView txtTitle, txtPubDate;
        ImageView thumbnail;
        RelativeLayout lytItemFeed;
    }
}

這不能直接回答您的問題,但是您可能要考慮使用圖像加載庫,例如PicassoVolley 從網絡加載圖像有很多復雜性,有些是微妙的,有些則不是很多,當您嘗試在ListView中進行加載時,復雜性更大。 這兩個庫(以及那里的其他幾個庫)都可以為您解決所有或大部分復雜性。

您應該在AsyncTask中移動您的方法。 您正在主線程上下載內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM