У меня есть приложение для Android, в котором мне нужно получить изображения с сервера и показать их в виде сетки с заголовком. Поэтому, пожалуйста, любой может помочь мне, как я могу выполнить эту задачу в андроид.Загрузка изображения в виде сетки с сервера
ответ
Это может быть сделано в следующих шагах:
- Создать AsyncTaskLoader (здесь хороший учебник http://www.androiddesignpatterns.com/2012/08/implementing-loaders.html). Там вы можете загружать изображения с сервера.
- Создайте пользовательский адаптер для хранения изображений и создания представлений путем расширения, например,
BaseAdapter
. Сделайте свою собственную реализацию необходимых функций. - Создайте функцию внутри этого адаптера, ответственную за добавление новых данных. Не забудьте позвонить
notifyDataSetChanged()
, как только вы закончите - Прикрепите этот адаптер к
GridView
- Нажатием загруженных изображений в адаптер.
EDIT Ok, здесь является основным доказательством концепции:
активность (погрузчик может быть запущен в методе onCreate
):
public class MyActivity extends Activity implements LoaderManager.LoaderCallbacks<ArrayList<Drawable>> {
//other stuff
@Override
public Loader<ArrayList<Drawable>> onCreateLoader(int id, Bundle args) {
return new ImageLoader(this);
}
@Override
public void onLoadFinished(Loader<ArrayList<Drawable>> loader, ArrayList<Drawable> data) {
myAdapter.pushData(data);
}
@Override
public void onLoaderReset(Loader<ArrayList<Drawable>> loader) {
}
}
погрузчик:
public class ImageLoader extends AsyncTaskLoader<ArrayList<Drawable>> {
public ImageLoader(Context context) {
super(context);
}
@Override
public ArrayList<Drawable> loadInBackground() {
//load the stuff
return data;
}
@Override
protected void onStartLoading() {
if (data != null) {
deliverResult(data);
}
if (takeContentChanged() || data == null) {
forceLoad();
}
}
}
Adapter:
public class MyAdapter extends BaseAdapter {
ArrayList<Drawable> data = new ArrayList<>();
//other functions
public void pushData(ArrayList<Drawable> data){
this.data = data;
notifyDataSetChanged();
}
}
все url-файлы .php. Я пробовал это, но он не работает для меня. – Akash
В таком случае покажите, что вы пытались сделать – nikis
извините, но я только что удалил весь код. Можете ли вы дать мне пример кода для этого, чтобы я мог попробовать это в своем проекте. Я также не могу загрузить изображения с моего сервера. И я всего лишь новичок в программировании для Android, поэтому у меня меньше знаний в подключении к базе данных. – Akash
Если вы используете в URL для загрузки изображения с сервера, то вы можете использовать Пикассо.
Для использования Picasso
->
1) Сначала добавьте compile 'com.squareup.picasso:picasso:2.5.2'
в зависимости в built.gradle.
2) Добавить импорт "com.squareup.picasso.Picasso;"
в сетку Адаптер java-файл.
3) Теперь добавьте "Picasso.with(context).load(pImage[position]).into(imageView);"
в файл адаптера (который загружает сетку из данных сервера).
compileSdkVersion 23
buildToolsVersion "23.0.2"
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.squareup.picasso:picasso:2.5.2'
}
Теперь адаптер файл находится в методе GetView (Примечание po
глобальная переменная):
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
po = position;
View gridView;
if (convertView == null) {
gridView = inflater.inflate(R.layout.dashboard_inner, null);// set image based on selected text
} else {
gridView = (View) convertView;
}
imageView = (ImageView) gridView.findViewById(R.id.grid_item_image);
TextView textView1 = (TextView)gridView.findViewById(R.id.grid_item_text1);
textView1.setText(pName[position]);
TextView textView2 = (TextView) gridView.findViewById(R.id.grid_item_text2);
textView2.setText(pPrice[position]);
textView2.setPaintFlags(textView2.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
TextView textView3 = (TextView) gridView.findViewById(R.id.grid_item_text3);
textView3.setText(pSprice[position]);
TextView textView4 = (TextView) gridView.findViewById(R.id.grid_item_text4);
textView4.setText(pOffer[position]);
Picasso.with(context).load(pImage[position]).into(imageView);
return gridView;
}
http://sunil-android.blogspot.in/2013/09/lazy-loading-image- download-from.html используйте эту ссылку .. используйте gridview вместо listview –