2017-07-03 3 views
1

は、私は可能なすべてのものを試してみましたが、私のJSONがグライド:どのようにキャッシュから画像を読み込むからグライドを停止する代わりに、サーバからロードするたび

MY Androidアプリを更新されるたびに滑空するイメージを更新する方法を見つけ出すことを試みることができませんでしたそれだけでcache.Itからイメージをロードし、その後initally FIRSTTIME用グライドを使用して、JSONから画像をロードし、私はdiskCacheStrategy(DiskCacheStrategy.NONE)を使用してみました私は、アプリを削除し、それを

を再インストールまで、サーバー上で更新されている負荷の画像をdoesnotと.skipMemoryCache(真)しかし何も起こらなかった

Glide.with(mContext).load(image.getMedium()) 
       .thumbnail(0.5f) 
       .crossFade() 
       .diskCacheStrategy(DiskCacheStrategy.NONE) 
       .skipMemoryCache(true) 
       .into(holder.thumbnail); 

この私のコードのGalleryAdapter.javaここ

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.GestureDetector; 
import android.view.LayoutInflater; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 

import com.bumptech.glide.Glide; 
import com.bumptech.glide.load.engine.DiskCacheStrategy; 

import java.util.List; 

import com.bumptech.glide.signature.StringSignature; 
import com.dailysolutions.sn.R; 
import com.dailysolutions.sn.model.Image; 

/** 
* Created by Sagunesh on 31/03/16. 
*/ 

public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.MyViewHolder> { 

    private List<Image> images; 
    private Context mContext; 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public ImageView thumbnail; 

     public MyViewHolder(View view) { 
      super(view); 
      thumbnail = (ImageView) view.findViewById(R.id.thumbnail); 
     } 
    } 


    public GalleryAdapter(Context context, List<Image> images) { 
     mContext = context; 
     this.images = images; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.gallery_thumbnail, parent, false); 

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     Image image = images.get(position); 

     Glide.with(mContext).load(image.getMedium()) 
       .thumbnail(0.5f) 
       .crossFade() 
       .diskCacheStrategy(DiskCacheStrategy.NONE) 
       .skipMemoryCache(true) 
       .into(holder.thumbnail); 

    } 

    @Override 
    public int getItemCount() { 
     return images.size(); 
    } 

    public interface ClickListener { 
     void onClick(View view, int position); 

     void onLongClick(View view, int position); 
    } 

    public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { 

     private GestureDetector gestureDetector; 
     private GalleryAdapter.ClickListener clickListener; 

     public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final GalleryAdapter.ClickListener clickListener) { 
      this.clickListener = clickListener; 
      gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
       @Override 
       public boolean onSingleTapUp(MotionEvent e) { 
        return true; 
       } 

       @Override 
       public void onLongPress(MotionEvent e) { 
        View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
        if (child != null && clickListener != null) { 
         clickListener.onLongClick(child, recyclerView.getChildPosition(child)); 
        } 
       } 
      }); 
     } 

     @Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 

      View child = rv.findChildViewUnder(e.getX(), e.getY()); 
      if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) { 
       clickListener.onClick(child, rv.getChildPosition(child)); 
      } 
      return false; 
     } 

     @Override 
     public void onTouchEvent(RecyclerView rv, MotionEvent e) { 
     } 

     @Override 
     public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

     } 
    } 
} 

は、誰もが誰かが私を助けている場合me.Itは本当に素晴らしいものだ助けてくださいMainActivity.java

import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.View; 
import android.view.MenuItem; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.bumptech.glide.Glide; 
import com.dailysolutions.sn.R; 
import com.dailysolutions.sn.adapter.GalleryAdapter; 
import com.google.android.gms.ads.AdListener; 
import com.google.android.gms.ads.AdView; 

import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.DefaultItemAnimator; 
import android.support.v7.widget.GridLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonArrayRequest; 
import com.google.android.gms.ads.AdRequest; 


import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 

import com.dailysolutions.sn.app.AppController; 
import com.dailysolutions.sn.model.Image; 
import com.google.android.gms.ads.InterstitialAd; 

import java.util.ArrayList; 

public class MainActivity extends BaseActivity { 
    private DrawerLayout drawerLayout; 
    private Toolbar toolbar; 



    private String TAG = MainActivity.class.getSimpleName(); 
    private static final String endpoint = "https://www.freesabkuch.com/api_mehndi/glide.json"; 
    private ArrayList<Image> images; 
    private ProgressDialog pDialog; 
    private GalleryAdapter mAdapter; 
    private RecyclerView recyclerView; 
    private AdView mAdView; 
    InterstitialAd interstitial; 

    // Our created menu to use 
    private Menu mymenu; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     initNavigationDrawer(); 
     checkConnectivity(); 

     //advertisement 
     mAdView = (AdView) findViewById(R.id.adView); 
     AdRequest adRequest = new AdRequest.Builder() 
       .build(); 
     mAdView.loadAd(adRequest); 

     // Prepare the Interstitial Ad 
     interstitial = new InterstitialAd(MainActivity.this); 
// Insert the Ad Unit ID 
     interstitial.setAdUnitId(getString(R.string.admob_interstitial_id)); 

     interstitial.loadAd(adRequest); 
// Prepare an Interstitial Ad Listener 
     interstitial.setAdListener(new AdListener() { 
      public void onAdLoaded() { 
       // Call displayInterstitial() function 
       displayInterstitial(); 
      } 
     }); 

     recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

     pDialog = new ProgressDialog(this); 
     images = new ArrayList<>(); 
     mAdapter = new GalleryAdapter(getApplicationContext(), images); 

     RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getApplicationContext(), 2); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(mAdapter); 

     recyclerView.addOnItemTouchListener(new GalleryAdapter.RecyclerTouchListener(getApplicationContext(), recyclerView, new GalleryAdapter.ClickListener() { 
      @Override 
      public void onClick(View view, int position) { 
       Bundle bundle = new Bundle(); 
       bundle.putSerializable("images", images); 
       bundle.putInt("position", position); 

       FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
       SlideshowDialogFragment newFragment = SlideshowDialogFragment.newInstance(); 
       newFragment.setArguments(bundle); 
       newFragment.show(ft, "slideshow"); 
      } 

      @Override 
      public void onLongClick(View view, int position) { 

      } 
     })); 

     fetchImages(); 




    } 

    public void displayInterstitial() { 
// If Ads are loaded, show Interstitial else show nothing. 
     if (interstitial.isLoaded()) { 
      interstitial.show(); 
     } 
    } 
    @Override 
    public void onResume() { 
     // Start or resume the game. 
     super.onResume(); 
     displayInterstitial(); 
    } 
    @Override 
    public void onStart() { 
     super.onStart(); 
     displayInterstitial(); 
    } 
    private void fetchImages() { 

     pDialog.setMessage("Downloading...."); 
     pDialog.show(); 

     JsonArrayRequest req = new JsonArrayRequest(endpoint, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 
         pDialog.hide(); 

         images.clear(); 
         for (int i = 0; i < response.length(); i++) { 
          try { 
           JSONObject object = response.getJSONObject(i); 
           Image image = new Image(); 
           image.setName(object.getString("name")); 

           JSONObject url = object.getJSONObject("url"); 
           image.setSmall(url.getString("small")); 
           image.setMedium(url.getString("medium")); 
           image.setLarge(url.getString("large")); 
           image.setTimestamp(object.getString("timestamp")); 

           images.add(image); 

          } catch (JSONException e) { 
           Log.e(TAG, "Json parsing error: " + e.getMessage()); 
          } 
         } 

         mAdapter.notifyDataSetChanged(); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e(TAG, "Error: " + error.getMessage()); 
       pDialog.hide(); 
      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(req); 
    } 



    @Override 
    public void onBackPressed() { 
     exit(); 
    } 


    public void initNavigationDrawer() { 

     NavigationView navigationView = (NavigationView)findViewById(R.id.navigation_view); 
     navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 

       int id = menuItem.getItemId(); 

       switch (id){ 
        case R.id.home: 
         Toast.makeText(getApplicationContext(),"Home",Toast.LENGTH_SHORT).show(); 
         drawerLayout.closeDrawers(); 
         break; 
        case R.id.share: 
         Toast.makeText(getApplicationContext(),"Share",Toast.LENGTH_SHORT).show(); 
         drawerLayout.closeDrawers(); 
         try { 
          Intent i = new Intent(Intent.ACTION_SEND); 
          i.setType("text/plain"); 
          i.putExtra(Intent.EXTRA_SUBJECT, "My application name"); 
          String sAux = "\nLet me recommend you this application\n\n"; 
          sAux = sAux + "https://play.google.com/store/apps/details?id=Orion.Soft \n\n"; 
          i.putExtra(Intent.EXTRA_TEXT, sAux); 
          startActivity(Intent.createChooser(i, "choose one")); 
         } catch(Exception e) { 
          //e.toString(); 
         } 
        case R.id.trash: 
         Toast.makeText(getApplicationContext(),"Drawer Closed",Toast.LENGTH_SHORT).show(); 
         drawerLayout.closeDrawers(); 
         break; 
        case R.id.logout: 
         exit(); 

       } 
       return true; 
      } 
     }); 
     View header = navigationView.getHeaderView(0); 
     TextView tv_email = (TextView)header.findViewById(R.id.tv_email); 
     tv_email.setText("Daily Solutions"); 
     drawerLayout = (DrawerLayout)findViewById(R.id.drawer); 

     ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close){ 

      @Override 
      public void onDrawerClosed(View v){ 
       super.onDrawerClosed(v); 
      } 

      @Override 
      public void onDrawerOpened(View v) { 
       super.onDrawerOpened(v); 
      } 
     }; 
     drawerLayout.addDrawerListener(actionBarDrawerToggle); 
     actionBarDrawerToggle.syncState(); 
    } 
    private void checkConnectivity(){ 
     if(ConnectionHelper.isConnectedOrConnecting(getApplicationContext())) { 
      hideErrorsBar(true); 

     }else { 
      //hideErrorsBar(false); 
      Intent Intent = new Intent(MainActivity.this,NoInternet.class); 
      startActivity(Intent); 
      finish(); 
     } 
    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Add our menu 
     getMenuInflater().inflate(R.menu.menu_main, menu); 

     // We should save our menu so we can use it to reset our updater. 
     mymenu = menu; 

     // 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
      case R.id.action_refresh: 
       // Do animation start 
       LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       ImageView iv = (ImageView)inflater.inflate(R.layout.iv_refresh, null); 
       Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotate_refresh); 
       rotation.setRepeatCount(Animation.INFINITE); 
       iv.startAnimation(rotation); 
       item.setActionView(iv); 
       new UpdateTask(this).execute(); 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 


    public void resetUpdating() 
    { 
     // Get our refresh item from the menu 
     MenuItem m = mymenu.findItem(R.id.action_refresh); 
     if(m.getActionView()!=null) 
     { 
      // Remove the animation. 
      m.getActionView().clearAnimation(); 
      m.setActionView(null); 
     } 
    } 



} 

のコードですこの問題

答えて

0

まあ、誰もが感謝の助け:)

ための多くは私が問題を引き起こしていたボレーライブラリのキャッシュを無効にすることで、この問題を解決しますが、とにかく助けてくれてありがとう:)

//disabling caching for url 
     AppController.getInstance().getRequestQueue().getCache().remove(url); 
0

Signatureを使用すると、キャッシュを無効にしてネットワークから画像を読み込むことができます。それはあなたがまた

をキャッシュにグライドのドキュメントを1としてSignatures を設定してみてください可能性がありたび

+0

ちょっと助けてくれてありがとう私はそれを試みたが、何も起こっていない私のgalleryadapter.javaファイル 'Glide.with(mContext).load(image.getMedium()) .thumbnail(0.5f) .crossFade() 。 StringSignature(System.currentTimeMillis()+ "")) .into(holder.thumbnail); ' –

0

この

を試してみてくださいネットワークからイメージをロードするようにするだけの署名に new StringSignature(System.currentTimeMillis()+"")を渡す

Glide.with(Fragment/context) 
.load(imagePath) 
.signature(new StringSignature(yourVersion)) 
.into(ImageView); 

をお試しください

Glide.with(context) 
    .load(url) . 
    signature(new StringSignature(System.currentTimeMillis())) 
.into(imageView); 

詳細はhereを確認してください。

+0

ちょっと助けてくれてありがとうございましたが、何も起こらなかったのですが、上記のファイルに変更を加えることができます** GalleryAdapter.java **と私は私が何か間違っていると思うので、ansを与えるこれは 'Glide.with(mContext).load (image.getMedium()) .thumbnail(0.5f) .crossFade() .signature(new StringSignature(System.currentTimeMillis()) .into(holder.thumbnail); ' –

関連する問題