Как получить удаленный JPG с URL-адреса, используя USER и пароль? - PullRequest
1 голос
/ 15 марта 2012

Я хочу получить удаленный файл JPG с URL-адреса и поместить его в растровое изображение. Я разрабатываю для Android, у меня есть интернет на телефоне и интернет-разрешение на манифест.

Проблема в том, что для URL-адреса требуются пользователь и пароль.

Я знаю, как получить удаленное изображение в растровое изображение без пароля:

public static Bitmap getBitmapFromURL(String src) {
    try {
        URL url = new URL(src);
        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;
}

И я знаю, как получить строку XML из URL с помощью ПОЛЬЗОВАТЕЛЯ И ПАРОЛЯ:

public String getXML(String url){
    StringBuilder builder = new StringBuilder();
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpResponse response; 
    try { 
         ((AbstractHttpClient) httpclient).getCredentialsProvider().setCredentials(
                new org.apache.http.auth.AuthScope(null,-1), 
                new org.apache.http.auth.UsernamePasswordCredentials(MagazineStatus._username, MagazineStatus._password)); 

        response = httpclient.execute(new HttpGet(url)); 
        StatusLine statusLine = response.getStatusLine(); 
        if(statusLine.getStatusCode() == HttpStatus.SC_OK) { 
            try {                   
                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);        
            }catch(Exception ex) {Log.e("DBF Error",ex.toString());}                 
        }else { 
            response.getEntity().getContent().close(); 
            throw new IOException(statusLine.getReasonPhrase()); 
        } 
    }catch(ClientProtocolException cpe) {Log.e("ClientProtocolException @ at FPT",cpe.toString());} catch(Exception ex) {Log.e("Exception at FETCHPROJECTASK",ex.toString());} 
    return builder.toString();
}

Итак, мне нужно загрузить растровое изображение из URL-адреса, но с использованием USER и PASSWORD, как в методе XML. Но я не знаю, как объединить коды магии.

Пожалуйста, кто-нибудь может помочь мне достичь этого?

Спасибо

Ответы [ 3 ]

1 голос
/ 15 марта 2012

Это не совсем актуально, но вот предложение. Возможно, вы захотите использовать файл PNG, а не файл JPEG, поскольку PNG не теряет своего качества при сжатии данных (Android также предпочитает использовать PNG). Таким образом, ваше представление будет выглядеть примерно одинаково на всех устройствах.

0 голосов
/ 16 марта 2012

Вы не можете сделать это, используя ту же задачу. Вам нужно создать еще одну асинхронную задачу <>, которая будет получать изображение для вас и возвращать растровое изображение Я делал это раньше тоже. Используйте этот код для этого ..

Bitmap image = null;

    @Override
    protected Bitmap doInBackground(String... params) {
        try {
// param[0] would be replaced with your image path.
            image = BitmapFactory.decodeStream((InputStream)new URL(params[0]).getContent());
        } catch (MalformedURLException e) {
            Log.e("MalformedURLException",e.toString());
        } catch (IOException e) {
            Log.e("IOException",e.toString());
        }       
        return image;       
    }

Надеюсь, у вас снова все получится.

0 голосов
/ 15 марта 2012

У меня была похожая проблема, и для ее решения я вставил следующий заголовок в запрос http: Заголовок: Значение авторизации: "Basic" + Base64Coder.encodeString (user + ":" + pass)

Base64Coder - это бесплатный класс, который помог мне преобразовать пользователя + ":" + передать строку в формат Base64.Вы можете скачать код из нескольких мест в Интернете.

О том, как вставить новый заголовок в запрос http, я использовал объекты HttpPost и HttpGet вместо HttpURLConnection.Я не знаю, можно ли это сделать с помощью HttpURLConnection.Чтобы установить заголовок, вам нужно использовать только метод setHeader.

Я включил ссылку, которая показывает, как использовать httpget.http://w3mentor.com/learn/java/android-development/android-http-services/example-of-http-get-request-using-httpclient-in-android/

...