2017-02-17 88 views
0

我已經能夠從Parse中提取字符串數據並將其設置爲textviews,但我無法獲取圖像文件並將其設置在imageview中,我嘗試使用Byte方法,但有沒有成功,並在data.length上出現錯誤。繼承人我的代碼:從Parse中加載圖片並設置在圖片查看

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在imageview上顯示它 –

+0

我該如何實現此方法? – user4682589

+0

參考這個答案http://stackoverflow.com/a/39972276/3946958 ...他們已經使用滑行庫 –

回答

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

可以使用滑翔庫從下面的服務器加載圖像,如下所示: -

Gradles entry for the Glide

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

像這是你的ImageView,您可以使用進度從服務器顯示的圖像的加載像

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