2017-02-17 11 views
0

Мне удалось вытащить строковые данные из Parse и установить его в текстовые поля, но я не могу получить файл изображения и установить его в режиме просмотра изображений, я попытался использовать метод Byte, но не был успешным и получить ошибку на data.length. Heres мой код:Загрузка изображения из Parse и установка в imageView

public class mygardenDetail extends Activity { 

String name; 
//String image; 
String kgsays; 
String care; 
String tips; 
String image; 
Context context; 
ImageLoader imageLoader = new ImageLoader(this); 
List<ParseObject> ob; 
private List<PlantListitems> plantlist = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // Get the view from singleitemview.xml 
    setContentView(R.layout.mygarden_detail); 
    //new mygardenDetail.RemoteDataTask().execute(); 
    imageLoader = new ImageLoader(context); 

    Intent i = getIntent(); 
    // Get the result of rank 
    name = i.getStringExtra("name"); 
    //Get the result of country 
    // kgsays = i.getStringExtra("kgsays"); 
    // Get the result of country 
    //care = i.getStringExtra("care"); 
    // Get the result of population 
    //tips = i.getStringExtra("tips"); 
    // Get the result of flag 
    // image = i.getStringExtra("image"); 


    // Locate the TextViews in singleitemview.xml 

    TextView txtName = (TextView) findViewById(R.id.name); 
    final TextView txtKGsays = (TextView) findViewById(R.id.KGsays); 
    final TextView txtCare = (TextView) findViewById(R.id.Care); 
    final TextView txtTips = (TextView) findViewById(R.id.Tips); 

    // Locate the ImageView in singleitemview.xml 
    final ImageView imgflag = (ImageView) findViewById(R.id.image); 
    //Set values in containers 
    txtName.setText(name); 
    imageLoader.DisplayImage(image, imgflag); 

    ParseQuery query = new ParseQuery<>("Plants2"); 
    query.whereEqualTo("plantName", (name)); 
    query.findInBackground(new FindCallback<ParseObject>() { 
     public void done(List<ParseObject> listCountry, ParseException e) { 

      for (ParseObject country : listCountry) { 


       // Locate images in flag column 
       ParseFile image = (ParseFile) country.get("image"); 


       //PlantListitems map = new PlantListitems(); 
       txtKGsays.setText((String) country.get("KGsays")); 
       txtCare.setText((String) country.get("Care")); 
       txtTips.setText((String) country.get("tips")); 
       Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length); 
       imgflag.setImageBitmap(bmp); 

       //plantlist.add(map); 
       //imageLoader.DisplayImage(image, imgflag); 
      } 
     } 


    }); 
} 
} 

Код, используемый для отображения в виде списка с помощью намерения:

// RemoteDataTask AsyncTask 
private class RemoteDataTask extends AsyncTask<Void, Void, Void> { 



    @Override 
    protected Void doInBackground(Void... params) { 
     // Create the array 
     worldpopulationlist = new ArrayList<WorldPopulation>(); 
     try { 
      // Locate the class table named "Country" in Parse.com 
      ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
        "Plants2"); 
      // Locate the column named "ranknum" in Parse.com and order list 
      // by ascending 
      query.orderByAscending("plantName"); 
      ob = query.find(); 
      for (ParseObject country : ob) { 
       // Locate images in flag column 
       ParseFile image = (ParseFile) country.get("image"); 

       WorldPopulation map = new WorldPopulation(); 
       map.setName((String) country.get("plantName")); 
       map.setType((String) country.get("type")); 
       map.setPlot((String) country.get("plotSize")); 
       map.setImage(image.getUrl()); 
       worldpopulationlist.add(map); 
      } 
     } catch (ParseException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 
+0

Вы можете использовать любую библиотеку Glide, Universal или picasso для показа на изображении изображения –

+0

, как бы реализовать этот метод? – user4682589

+0

Ответьте на этот ответ http://stackoverflow.com/a/39972276/3946958 ... Они использовали библиотеку glide –

ответ

0

Этот исходный код, кажется, работает, чтобы загрузить изображение из файла:

Bitmap bitmap = BitmapFactory.decodeFile(pathToImage); 

Классы Bitmap и BitmapFactory расположены в каталоге android.graphics:

import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 

Предполагая, что ваш путь к изображению правильно, вы можете добавить растровое изображение в ImageView так:

ImageView imageView = (ImageView) getActivity().findViewById(R.id.imageView); 
imageView.setImageBitmap(BitmapFactory.decodeFile(pathToPicture)); 

кредиты - http://alvinalexander.com/source-code/android/android-how-load-image-file-and-set-imageview

0

Вы можете использовать библиотеку Glide для загрузка изображений с сервера, как показано ниже: -

записи Gradles для Glide

// For the glide libraray 
compile 'com.github.bumptech.glide:glide:3.7.0' 

Как это ваш ImageView, вы можете использовать ProgressBar, чтобы показать загрузку изображения с сервера, как

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     > 

     <ProgressBar 
      android:id="@+id/YOUR_PROGRESSBAR" 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:layout_centerInParent="true" 
      /> 

     <ImageView 
      android:id="@+id/YOUR_IMAGEVIEW" 
      android:layout_width="match_parent" 
      android:layout_height="120dp" 
      android:textColor="@android:color/black" 
      android:layout_centerInParent="true" 
      android:visibility="invisible" 
      android:src="@drawable/bubble1" /> 

    </RelativeLayout> 

И в вашем Activity/Fragment использования этой строки кода для него

YOUR_PROGRESSBAR.setVisibility(View.VISIBLE); 
Glide.with(mContext) 
       .load("your_server_url") 
       .fitCenter() 
       .crossFade() 
       .listener(new RequestListener<String, GlideDrawable>() { 
        @Override 
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { 
         if (e instanceof UnknownHostException) 
          YOUR_PROGRESSBAR.setVisibility(View.GONE); 

         return false; 
        } 

        @Override 
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { 
         YOUR_PROGRESSBAR.setVisibility(View.GONE); 
         YOUR_IMAGEVIEW.setVisibility(View.VISIBLE); 
         return false; 
        } 
       }).into(YOUR_IMAGEVIEW);;