【问题标题】:Unable to parse image from URL无法从 URL 解析图像
【发布时间】:2021-11-04 14:52:32
【问题描述】:

我收到了这个错误:

10-16 21:56:30.502:INFO/System.out(361):resolveUri 在错误的位图 uri 上失败:android.graphics.drawable.BitmapDrawable@44f0c0c8

在尝试运行此代码时

public class deals extends Activity{

private ArrayList<HashMap<String, Drawable>> myBooks;





@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.deal);

myBooks = new ArrayList<HashMap<String,Drawable>>();
HashMap<String, Drawable> hm;


ListView myListView = (ListView) findViewById(R.id.listView1);

Environment.getExternalStorageDirectory().getAbsolutePath();

Drawable drawable3 = LoadImageFromWebOperations("http://www.bitterwallet.com/wp-content/uploads/2010/04/Tesco-Logo-Colour.jpg");

hm = new HashMap<String, Drawable>();
hm.put("Company", null);
hm.put("Offer", null);
hm.put("IMG", LoadImageFromWebOperations("http://2.bp.blogspot.com/_mCJwxGhlcQQ/TJxEHIOTpnI/AAAAAAAACqA/D11qqbNam80/s1600/TESCO+logo.jpg"));
myBooks.add(hm);

SimpleAdapter adapter = new SimpleAdapter(this, myBooks, R.layout.listview,  new String[]{"company","offer","IMG"}, new int[]{R.id.text1, R.id.text2, R.id.img});


myListView.setAdapter(adapter);


try {
    JSONArray jsonArray = new JSONArray(readTwitterFeed());
    int length = jsonArray.length();
      List<String> listContents = new ArrayList<String>(length);
     for (int i = 0; i < length; i++)
      {
//        listContents.add(jsonArray.getString(i));
         System.out.println(jsonArray.getString(i));

      }


 //     myListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listContents));


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

}

 public String readTwitterFeed() {

        StringBuilder builder = new StringBuilder();
        System.out.println("here");
        HttpClient client = new DefaultHttpClient();
        //HttpGet httpGet = new HttpGet(
            //  "http://www.hotels-in-london-hotels.com/mytrolly/service.php?request={\"mode\":\"category\"}");
        String url = "";
        try {
            //url = "http://hotels-in-london-hotels.com/mytrolly/service.php?request={\"mode\":\"search\",\"category\":\"2\",\"seller\":\"0\",\"page\":\"1\"}";
            url = "http://www.hotels-in-london-hotels.com/mytrolly/serviceSeller.php";





            System.out.println(url);
            String encodedurl = URLEncoder.encode(url,"UTF-8");
            Log.d("TEST", encodedurl);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } 


        HttpGet httpGet = new HttpGet(url);

        System.out.println("here");
        try {
            HttpResponse response = client.execute(httpGet);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                InputStream content = entity.getContent();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(content));
                String line;
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }
            } else {
                //Log.e(ParseJSON.class.toString(), "Failed to download file");
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
            System.out.println("here is the error" + e.toString());
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("here is the error" + e.toString());
        }
        return builder.toString();
    }

 private Drawable LoadImageFromWebOperations(String url)
   {
                try
                {
                        InputStream is = (InputStream) new URL(url).getContent();
                        Drawable d = Drawable.createFromStream(is, "src name");
                        return d;
                }catch (Exception e) {
                        System.out.println("Exc="+e);
                        return null;
                }
        }
}

我试过做类似这个小伙子的事情:

"resolveUri failed on bad bitmap uri" when putting image on ListView

但是我得到了一个空指针异常。有谁知道如何解决这个问题?

【问题讨论】:

    标签: android url


    【解决方案1】:

    我使用下面给出的代码来获取 url 的图像:

    static Bitmap bmp;
    private static File cacheDir;
    static Bitmap bitmap = null;
    static HttpURLConnection conn;
    
    private static InputStream fetch(String urlString)
            throws MalformedURLException, IOException {
    
        conn = (HttpURLConnection) (new URL(urlString)).openConnection();
        conn.setDoInput(true);
        conn.connect();
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet request = new HttpGet(urlString);
        HttpResponse response = httpClient.execute(request);
        return conn.getInputStream();
    }
    
    Resources res;
    
    // ***********New Function For Fatching
    public static Drawable LoadImage(String URL) {
        Drawable drawable = null;
        Bitmap bm = null;
        try {
            if (fetch(URL) != null) {
                try {
                    BitmapFactory.Options options = null;
                    // options.inSampleSize=4;
                    InputStream obj = (InputStream) fetch(URL);
                    bm = BitmapFactory.decodeStream(obj, null, null);
                    obj.close();
                    conn.disconnect();
                } catch (OutOfMemoryError e) {
                } catch (IndexOutOfBoundsException e) {
                }
                drawable = new BitmapDrawable(bm);
                return drawable;
            } else {
    
                return null;
            }
    
        } catch (Exception e) {
            Log.e("GUIMethodClasas", "fetchDrawable failed", e);
            return null;
    
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      试试这个代码:

      URL url = new URL(yourImageURL);
      HttpUrlConnection conn = (HttpUrlConnection)url.openConnection();
      conn.setDoInput(true);
      conn.connect();
      InputStream is = conn.getInputStream();
      Bitmap b = BitmapFactory.decodeStream(is);
      yourImageViewObject.setImageBitmap(b);
      
      Hope this will help you! Happy Coding
      

      【讨论】:

        猜你喜欢
        • 2010-10-24
        • 2021-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多