2014-02-18 1 views
0

У меня есть приложение для Android, в котором мне нужно получить изображения с сервера и показать их в виде сетки с заголовком. Поэтому, пожалуйста, любой может помочь мне, как я могу выполнить эту задачу в андроид.Загрузка изображения в виде сетки с сервера

+0

http://sunil-android.blogspot.in/2013/09/lazy-loading-image- download-from.html используйте эту ссылку .. используйте gridview вместо listview –

ответ

1

Это может быть сделано в следующих шагах:

  1. Создать AsyncTaskLoader (здесь хороший учебник http://www.androiddesignpatterns.com/2012/08/implementing-loaders.html). Там вы можете загружать изображения с сервера.
  2. Создайте пользовательский адаптер для хранения изображений и создания представлений путем расширения, например, BaseAdapter. Сделайте свою собственную реализацию необходимых функций.
  3. Создайте функцию внутри этого адаптера, ответственную за добавление новых данных. Не забудьте позвонить notifyDataSetChanged(), как только вы закончите
  4. Прикрепите этот адаптер к GridView
  5. Нажатием загруженных изображений в адаптер.

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(); 
    } 

} 
+0

все url-файлы .php. Я пробовал это, но он не работает для меня. – Akash

+0

В таком случае покажите, что вы пытались сделать – nikis

+0

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

2

Если вы используете в 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; 
}