图像未加载和throwingjava.net.MalformedURLException

时间:2015-04-06 10:25:54

标签: android json

我正在解析一个json字符串,我从中获取了图像的url。然后我将该url传递给一个方法来获取图像并将其显示在imageview中,但图像未加载并抛出java.net.MalformedURLException异常。当我尝试将图像url直接传递给方法时,它会被加载。所以我不知道错误在哪里。任何帮助将不胜感激。提前致谢。我的代码在下面

public class CompanyDetailActivity extends Activity {

    ImageView coverimage;
    ImageView profileimage;
    TextView fullname;
    TextView tagline;
    TextView industry;
    TextView teamsize;
    TextView about;
    TextView year;
    TextView location;

    String Coverimage;
    String Profimage;
    String Fullname;
    String Tagline;
    String Industry;
    String Teamsize;
    String About;
    String Year;
    String Location;

    // Bitmap bitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.companydetails);

        coverimage = (ImageView) findViewById(R.id.CoverImage);
        profileimage = (ImageView) findViewById(R.id.ProfileImage);
        fullname = (TextView) findViewById(R.id.FullName);
        tagline = (TextView) findViewById(R.id.TagLine);
        industry = (TextView) findViewById(R.id.IndustryName);
        teamsize = (TextView) findViewById(R.id.TeamSize);
        about = (TextView) findViewById(R.id.CompanyAbout);
        year = (TextView) findViewById(R.id.FoundYear);
        location = (TextView) findViewById(R.id.Location);

        new DetailsAsynTask()
                .execute("http://www.mygmn.com/joblink/wp-admin/admin-ajax.php?action=joblink_searchcompanies&company_id=1180");

        GetXMLTask task = new GetXMLTask();
        task.execute(Coverimage);

    }

    public class DetailsAsynTask extends AsyncTask<String, Void, Boolean> {

        @Override
        protected Boolean doInBackground(String... arg0) {
            try {

                HttpClient client = new DefaultHttpClient();
                HttpPost post = new HttpPost(arg0[0]);

                HttpResponse response = client.execute(post);

                int status = response.getStatusLine().getStatusCode();
                if (status == 200) {
                    // to get response
                    HttpEntity entity = response.getEntity();
                    String data = EntityUtils.toString(entity);

                    JSONObject jObj = new JSONObject(data);
                    JSONObject MainObject = jObj.getJSONObject("data");
                    CompanyDetailsModel company = new CompanyDetailsModel();
                    Coverimage = company.setCoverImage(MainObject
                            .getString("cove_img"));

                    Profimage = company.setCompanyProfPicture(MainObject
                            .getString("company_profile_picture"));

                    Fullname = company.setCompanyFullName(MainObject
                            .getString("company_full_name"));

                    Tagline = company.setComapnyTagLine(MainObject
                            .getString("company_tagline"));
                    Industry = company.setCompanyInustry(MainObject
                            .getString("company_industry"));
                    Teamsize = company.setCompanyTeamSize(MainObject
                            .getString("company_teamsize"));
                    About = company.setCompanyAbout(MainObject
                            .getString("company_about"));
                    Year = company.setCompanyFoundYear(MainObject
                            .getString("company_foundyear"));
                    Location = company.setCompanyLocation(MainObject
                            .getString("company location"));

                    return true;
                }
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return false;
        }

        @Override
        protected void onPostExecute(Boolean result) {
            super.onPostExecute(result);
            if (result == false) {

            } else {

                fullname.setText(Fullname);
                tagline.setText(Tagline);
                industry.setText(Industry);
                teamsize.setText(Teamsize);
                about.setText(About);
                year.setText(Year);
                location.setText(Location);

            }
        }

    }

    private class GetXMLTask extends AsyncTask<String, Void, Bitmap> {
        @Override
        protected Bitmap doInBackground(String... urls) {
            Bitmap map = null;
            for (String url : urls) {
                map = downloadImage(url);
            }

            return map;
        }

        // Sets the Bitmap returned by doInBackground
        @Override
        protected void onPostExecute(Bitmap result) {
            coverimage.setImageBitmap(result);
        }

        // Creates Bitmap from InputStream and returns it
        private Bitmap downloadImage(String url) {
            Bitmap bitmap = null;
            InputStream stream = null;
            BitmapFactory.Options bmOptions = new BitmapFactory.Options();
            bmOptions.inSampleSize = 1;

            try {
                stream = getHttpConnection(url);
                bitmap = BitmapFactory.decodeStream(stream, null, bmOptions);
                stream.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            return bitmap;
        }

        // Makes HttpURLConnection and returns InputStream
        private InputStream getHttpConnection(String urlString)
                throws IOException {
            InputStream stream = null;
            URL url = new URL(urlString);
            URLConnection connection = url.openConnection();

            try {
                HttpURLConnection httpConnection = (HttpURLConnection) connection;
                httpConnection.setRequestMethod("GET");
                httpConnection.connect();

                if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                    stream = httpConnection.getInputStream();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return stream;
        }
    }

}

4 个答案:

答案 0 :(得分:1)

java.net.MalformedURLException可能由于安全原因而出现。您必须使用您的网址图片添加http://或https://。

答案 1 :(得分:0)

好的,请使用此代码

public class ImageLoading {

public enum BitmapManager {  
    INSTANCE;  

    private final Map<String, SoftReference<Bitmap>> cache;  
    private final ExecutorService pool;  
    private Map<ImageView, String> imageViews = Collections  
            .synchronizedMap(new WeakHashMap<ImageView, String>());  
    private Bitmap placeholder;  

    BitmapManager() {  
        cache = new HashMap<String, SoftReference<Bitmap>>();  
        pool = Executors.newFixedThreadPool(5);  
    }  

    public void setPlaceholder(Bitmap bmp) {  
        placeholder = bmp;  
    }  


    public Bitmap getBitmapFromCache(String url) {  
        if (cache.containsKey(url)) {  
            return cache.get(url).get();  
        } 
        return null;  
    }  

    public void queueJob(final String url, final ImageView imageView,  
            final int width, final int height) {  
        /* Create handler in UI thread. */  
        final Handler handler = new Handler() {  
            @Override  
            public void handleMessage(Message msg) {  
                String tag = imageViews.get(imageView);  
                if (tag != null && tag.equals(url)) {  
                    if (msg.obj != null) {  
                        imageView.setImageBitmap((Bitmap) msg.obj);  
                    } else {  
                        imageView.setImageBitmap(placeholder);  
                        Log.d(null, "fail " + url);  
                    }  
                }  
            }  
        };  

        pool.submit(new Runnable() {  
            @Override  
            public void run() {  
                final Bitmap bmp = downloadBitmap(url, width, height);  
                Message message = Message.obtain();  
                message.obj = bmp;  
                Log.d(null, "Item downloaded: " + url);  

                handler.sendMessage(message);  
            }  
        });  
    }  

    public void loadBitmap(final String url, final ImageView imageView,  
            final int width, final int height) {  
        imageViews.put(imageView, url);  
        Bitmap bitmap = getBitmapFromCache(url);  

        // check in UI thread, so no concurrency issues  
        if (bitmap != null) {  
            Log.d(null, "Item loaded from cache: " + url);  
            imageView.setImageBitmap(bitmap);  
        } else {  
            imageView.setImageBitmap(placeholder);  
            queueJob(url, imageView, width, height);  
        }  
    }  

    private Bitmap downloadBitmap(String url, int width, int height) {  
        try {  
            Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL(  
                    url).getContent());  
            bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);  
            cache.put(url, new SoftReference<Bitmap>(bitmap));  
            return bitmap;  
        } catch (MalformedURLException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  

        return null;  
    }  
}  

直接使用此代码,并在使用下载代码的地方使用此代码     ImageLoading.BitmapManager.INSTANCE.loadBitmap(&#34; http://&#34; + image,holder.img,150,180);

答案 2 :(得分:0)

您的网址可以从您的服务器响应中获得。不要手动加载图片,请尝试Picasso Library

使用这个库,你只需要做 -

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

答案 3 :(得分:0)

你正在onCreate()方法中运行两个asynctasks。由于这些是异步的,你的GetXMLTask使用String CoverImage执行为null。 所以,移动这段代码:

GetXMLTask task = new GetXMLTask(); 
task.execute(Coverimage);

到详细信息asynctask的onPostExecute()方法将解决问题。