Загрузка изображения с сервера
Рассмотрим загрузку изображения с сервера. Создадим простое приложение, весь интерфейс которого будет состоять из кнопки "Get image" и компонента ImageView для отображения картинки. При нажатии кнопки происходит запрос на сервер, изображение скачивается и показывается в ImageView.
Я намеренно здесь не усложняю приложение следующими свойствами:
- Загрузка изображения в отдельном потоке
- Выдача сообщения об ошибке (все записи пишутся в лог)
- Сохранение скаченной картинки на карту памяти, чтобы повторно не загружать изображение из интернета (для экономии трафика)
- Прочие плюшки
Нет, программулька ниже делает только одно: скачивает картинку и показывает ее. И все.
Итак, рассмотрим три файла: AndroidManifest.xml, файл лэйаута и исходник нашей Activity.
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="test"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.INTERNET" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".TestImageLoad"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
Обращаем внимание на строчку
<uses-permission android:name="android.permission.INTERNET" />
которая разрешает нашей программке выходить в Интернет.
Теперь рассмотрим файл лэйаута: main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:id="@+id/get_imagebt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get an image"
android:layout_gravity="center"
/>
<ImageView android:id="@+id/imview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
/>
</LinearLayout>
Теперь файл с кодом TestImageLoad.java:
package test;
import android.app.Activity;
import android.os.Bundle;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class TestImageLoad extends Activity {
static String TAG = "TestImageLoad";
ImageView imView;
String imageUrl="http://img-fotki.yandex.ru/get/3912/v7767648.1ff/0_2f107_254eefac_-2-L";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bt3= (Button)findViewById(R.id.get_imagebt);
bt3.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
downloadFile(imageUrl);
}
});
imView = (ImageView)findViewById(R.id.imview);
}
void downloadFile(String fileUrl){
Log.d(TAG,"downloadFile");
Log.d(TAG,"fileUrl="+fileUrl);
URL myFileUrl =null;
try {
myFileUrl= new URL(fileUrl);
Log.d(TAG,"fileUrl is OK URL");
} catch (MalformedURLException e) {
e.printStackTrace();
Log.d(TAG,"fileUrl is FUCKEN SHIT URL");
}
try {
HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
conn.setDoInput(true);
Log.d(TAG,"going to connect.....");
conn.connect();
Log.d(TAG,"connected OK");
InputStream is = conn.getInputStream();
Log.d(TAG,"got InputStream");
Bitmap bmImg = BitmapFactory.decodeStream(is);
Log.d(TAG,"decoded InputStream");
imView.setImageBitmap(bmImg);
Log.d(TAG,"just show image");
} catch (IOException e) {
Log.d(TAG,"oops, ERROR");
e.printStackTrace();
}
}
}
На этом все.
Комментарии: 4:
Пример полезный. Показывает как загрузить картинку из интернета.
Однако, вот это - imView.setImageBitmap(bmImg) - грубейшая ошибка, за которую могут "дать по рукам" - Вы обратились к UI-элементу не из UI-потока. Это если допустить, что метод выполняется в отдельном потоке, если же нет - и это ошибка.
Автору спасибо.
не ошибка это оговорка:
"Я намеренно здесь не усложняю приложение следующими свойствами:
Загрузка изображения в отдельном потоке"
автору Рахмет огромный!
Спасибо,есть ли другие способы загрузить картинки,а если есть можете показать.
Спасибо,есть ли другие способы загрузить картинки,а если есть можете показать.
Отправить комментарий
Подпишитесь на каналы Комментарии к сообщению [Atom]
<< Главная страница