2014-01-20 4 views
5

Я сохраняю 5 изображений в своем классе на parse.com. Я могу загрузить одно изображение на основе objectid в imageView. Мне нужно загрузить все 5 изображений в мои 5 ImageViews. Как я могу это сделать. Любая помощь будет оценена по достоинству. ThanksКак загрузить несколько изображений в ImageViews (parse.com)

ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Footer"); 
      // Locate the objectId from the class 
    query.getInBackground("tNp607WyQD", new GetCallback<ParseObject>() { 
       public void done(ParseObject object,ParseException e) { 
        // TODO Auto-generated method stub 
        // Locate the column named "ImageName" and set 
        // the string 
        ParseFile fileObject = (ParseFile) object.get("imageFile"); 
        fileObject.getDataInBackground(new GetDataCallback() { 
           public void done(byte[] data,ParseException e) { 
            if (e == null) { 
             Log.d("test","We've got data in data."); 
             // Decode the Byte[] into 
             // Bitmap 
             Bitmap bmp = BitmapFactory.decodeByteArray(data, 0,data.length); 
             // Get the ImageView from main.xml 
             //ImageView image = (ImageView) findViewById(R.id.ad1); 
             ImageView ad1=(ImageView) findViewById(R.id.ad1); 
             // Set the Bitmap into the 
             // ImageView 
             ad1.setImageBitmap(bmp); 
             // Close progress dialog 
             progressDialog.dismiss(); 
            } else { 
             Log.d("test", 
               "There was a problem downloading the data."); 
            } 
           } 
          }); 
       } 
      }); 
}} 
+0

случайной или последовательности? – venciallee

+0

Если вы случайно, вы можете перенести все свои изображения в список или стек сначала, а затем установить изображение для просмотра, если оно загружено. – venciallee

+0

@venciallee Can u pls дайте мне знать, как поместить все ImageView в список? – addy123

ответ

3

Я в состоянии решить эту проблему с помощью класса imageloader:

public class Login extends Activity { 
public ImageLoader imgl; 
EditText fullname, mobilenumber, occupation; 
Button save; 
ImageView ad1,ad2,ad3,ad4,ad5,ad6; 
List<ParseObject> ob; 

private ImageView[] imgs = new ImageView[5]; 
ProgressDialog progressDialog; 
int i=0; 
HorizontalScrollView horizontalScrollView1;   

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.userdata); 
    imgl=new ImageLoader(getApplicationContext()); 
    fullname = (EditText) findViewById(R.id.fullname) ; 
    mobilenumber = (EditText) findViewById(R.id.mobile) ; 
    occupation = (EditText) findViewById(R.id.occupation) ; 
    save=(Button) findViewById(R.id.btnSave);  
    horizontalScrollView1=(HorizontalScrollView) findViewById(R.id.horizontalScrollView1); 
    ad1=(ImageView) findViewById(R.id.ad1); 
    ad2=(ImageView) findViewById(R.id.ad2); 
    ad3=(ImageView) findViewById(R.id.ad3); 
    ad4=(ImageView) findViewById(R.id.ad4); 
    ad5=(ImageView) findViewById(R.id.ad5); 
    ad6=(ImageView) findViewById(R.id.ad6); 
    imgs[0] = ad2; 
    imgs[1] = ad3; 
    imgs[2] = ad4; 
    imgs[3] = ad5; 
    imgs[4] = ad6; 

    progressDialog= ProgressDialog.show(Login.this, "","Downloading Image...", true); 
       // Locate the class table named "Footer" in Parse.com 
    ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
      "Footer"); 
    query.orderByDescending("updatedAt"); 
    try { 
     ob = query.find(); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    for (ParseObject country : ob) { 
     ParseFile image = (ParseFile) country.get("imageFile"); 
     imgl.DisplayImage(image.getUrl(), imgs[i]); 
     i=i+1; 
     System.out.println("the urls are"+image.getUrl()); 
    progressDialog.dismiss(); 
    } 
} 
} 
1

Как насчет этого? (Может быть, это очень грубый способ)

Поскольку у вас есть 5 (определенных) изображений, создайте массив изображений.

private ImageView iv1, iv2, iv3, iv4, iv5; 
private ImageView[] imgs; 

В OnCreate(),

imgs = new ImageView[5]; 
iv1 = (ImageView) findViewById(R.id.iv1); 
iv2 = (ImageView) findViewById(R.id.iv2); 
iv3 = (ImageView) findViewById(R.id.iv3); 

и так далее

затем установить массив ImageView, как это,

imgs[0] = iv1; 
imgs[1] = iv2; 
imgs[2] = iv3; 

// так далее

В вашем ParseQuery, предполагая, что вы получаете требуемый список ParseObjects (5, я считаю), в проделанном методе GetCallBack,

public void done(List<ParseObject> objects,ParseException e) { 
for(int i =0 ; i < objects.size(); i++){ 

      ParseObject object = objects.get(i); 
      ParseFile fileObject = (ParseFile) object.get("imageFile"); 
      fileObject.getDataInBackground(new GetDataCallback() { 
           public void done(byte[] data,ParseException e) { 
            if (e == null) { 

             Bitmap bmp = BitmapFactory.decodeByteArray(data, 0,data.length); 
             imgs[i].setImageBitmap(bmp); 

            } else { 
             Log.d("test", 
               "There was a problem downloading the data."); 
            } 
           } 
          }); 
       } 
progressDialog.dismiss(); 
} 

В ParseQuery, чтобы получить изображения в порядке возрастания createdAt используйте

query.orderByAscending("createdAt"); 

Просто упаковывает, если вы сталкиваетесь с какой-либо проблемой с переменной «i» в ParseQuery (особенно вам не разрешается использовать i внутри done() и попросит вас объявить ее окончательной), дайте мне знать!

+0

Мне также нужно добавить строку после этого? 'query.findInBackground (новый FindCallback () {' – addy123

+0

который запрашивает один запрос FOR, вам нужно добавить его после инициализации ParseQUery ParseQuery query = new ParseQuery («Нижний колонтитул»); query.orderByAscending (" createdAt "); – droidx

+0

да, его просьба сделать его окончательным !!! Сделать это глобально разрешенным! – addy123

0

Вам необходимо реорганизовать свой код таким образом, чтобы вы могли создать индивидуальный экземпляр задачи загрузки.

Например, создайте класс FooterQuery, который обертывает ParseQuery. Когда вы строите объект, вы передаете в parseId и идентификатор ресурса ImageView, в который он должен быть загружен.

Если ImageView управляется AdapterView (список List или Grid), это будет сложнее.

Смежные вопросы