2016-09-21 65 views
1

当我点击我们项目中的图像时,另一个图像被加载。它工作正常,但是当我回到上一个活动,并单击相同的图像时,它不会被加载。Android-图像未加载

这是在应用程序处于活动状态时打开的第一个活动。此页面将显示网格图片

public class GentsActivity extends Fragment implements AdapterView.OnItemClickListener { 

    //Web api url 
    public static final String DATA_URL = "PHP LINK HERE"; 

    //Tag values to read from json 
    public static final String TAG_IMAGE_URL = "small_image_url"; 



    //GridView Object 
    private GridView gridView; 

    //ArrayList for Storing image urls and titles 
    private ArrayList<String> images; 

    private SwipeRefreshLayout swipeContainer; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     //Returning the layout file after inflating 
     //Change R.layout.tab1 in you classes 
     View view= inflater.inflate(R.layout.activity_gents, container, false); 

     gridView = (GridView) view.findViewById(R.id.gridView); 
     getData(); 
     //swipeContainer = (SwipeRefreshLayout) view.findViewById(R.id.swipeContainer); 

     images = new ArrayList<>(); 


     //Calling the getData method 


     /*swipeContainer.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       // Your code to refresh the list here. 
       // Make sure you call swipeContainer.setRefreshing(false) 
       // once the network request has completed successfully. 
       //Toast.makeText(this,"refresh ",Toast.LENGTH_SHORT).show(); 
       Intent mIntent= new Intent(SareeActivity.this,SareeActivity.class); 
       startActivity(mIntent); 
       swipeContainer.setRefreshing(false); 

      } 
     });*/ 

     return view; 
    } 

    private void getData(){ 
     //Showing a progress dialog while our app fetches the data from url 
     //final ProgressDialog loading = ProgressDialog.show(this, "Please wait,","Fetching data.",false,false); 

     //Creating a json array request to get the json from our api 
     JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(DATA_URL, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         //Dismissing the progressdialog on response 
         //    loading.dismiss(); 

         //Displaying our grid 
         showGrid(response); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 

        } 
       } 
     ); 

     //Creating a request queue 
     RequestQueue requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext()); 
     //Adding our request to the queue 
     requestQueue.add(jsonArrayRequest); 
    } 



    private void showGrid(JSONArray jsonArray){ 
     //Looping through all the elements of json array 
     for(int i = 0; i<jsonArray.length(); i++){ 
      //Creating a json object of the current index 
      JSONObject obj = null; 
      try { 
       //getting json object from current index 
       obj = jsonArray.getJSONObject(i); 

       // Log.d(TAG_IMAGE_URL,"JSON SHOW GRID"+obj); 
       //getting image url and title from json object 
       images.add(obj.getString(TAG_IMAGE_URL)); 
       Log.d(TAG_IMAGE_URL,"JSON SHOW GRID"+images); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
     //Creating GridViewAdapter Object 


     //Adding adapter to gridview 
     GridViewAdapter gridViewAdapter = new GridViewAdapter(getContext(),images); 
     gridView.setAdapter(gridViewAdapter); 
     gridView.setOnItemClickListener(this); 
    } 





    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
     String prompt = (String)adapterView.getItemAtPosition(i); 
     Intent mIntent= new Intent(getActivity(),LoadPhotoGents.class); 
     mIntent.putExtra("s",prompt); 
     startActivity(mIntent); 


    } 
} 

当我点击某张照片时,该照片将打开。下面

public class LoadPhotoGents extends AppCompatActivity { 
    private String data, path; 
    private ImageView ivi; 
    public static final String DATA_URL = "PHP LINK HERE"; 
    private static int id=0; 


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

     data = getIntent().getExtras().getString("s"); 
     path = data.replace(".JPG", "big.JPG"); 
     //Toast.makeText(this, "Path:" + path, Toast.LENGTH_LONG).show(); 



     ivi = (ImageView) findViewById(R.id.fullImage); 
     Picasso.with(LoadPhotoGents.this).load(path).into(ivi); 
     getData(); 
     ImageViewTouch img = (ImageViewTouch) findViewById(R.id.fullImage); 
     img.setBackgroundColor(Color.parseColor("#000000")); 
     ivi.buildDrawingCache(); 
     Bitmap bmap=ivi.getDrawingCache(); 
     //img.setFitToScreen(true); 
     img.setImageBitmap(bmap); 

    } 


    private void getData(){ 
     String url=DATA_URL+data.trim(); 

     StringRequest stringRequest=new StringRequest(url,new Response.Listener<String>(){ 
      @Override 
      public void onResponse(String response){ 

       showJSON(response); 

      } 
     }, 
       new Response.ErrorListener(){ 
        @Override 
        public void onErrorResponse(VolleyError error){ 

        } 
       }); 

     RequestQueue requestQueue= Volley.newRequestQueue(this); 
     requestQueue.add(stringRequest); 
    } 

    private void showJSON(String response){ 

     String name= ""; 
     try{ 
      JSONArray jsonArray=new JSONArray(response); 

      //JSONArray result= jsonObject.getJSONArray("result"); 
      JSONObject datas=jsonArray.getJSONObject(0); 
      name=datas.getString("description"); 



     }catch(JSONException e){ 
      Toast.makeText(this,"inside getData: "+name,Toast.LENGTH_SHORT).show(); 
     } 

    } 
} 

回答

0

这一定会帮助你调试问题。在你的代码中,我可以看到你正在使用Picasso.with().load().into()这个方法直接加载图像,你不知道在后台发生了什么。

你可以做两件事。首先使用Callback,当你的图像加载到ImageView的如下

Picasso.with(LoadPhotoGents.this).load(path).into(ivi, new Callback() 
       { 
        @Override 
        public void onSuccess() 
        { 
         Timber.d("Image Loaded Successfully"); 
        } 

        @Override 
        public void onError() 
        { 
         Timber.d("Error Loading Image"); 
        } 
       }); 

以上可用于处理图像加载/未加载的场景。

现在加载图像时出现实际的错误,您需要使用一个有听众的Picasso.Builder,它可以帮助您了解实际的错误。

构建毕加索构建如下

Picasso.Builder builder = new Picasso.Builder(mContext); 
builder.listener(new Picasso.Listener() 
{ 
    @Override 
    public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) 
    { 
     Timber.d(exception.getMessage()); 
    } 
}); 

Picasso pic = builder.build(); 

加载图像做以下

pic.load(path).into(ivi, new Callback() 
      { 
       @Override 
       public void onSuccess() 
       { 
        Timber.d("Image Loaded Successfully"); 
       } 

       @Override 
       public void onError() 
       { 
        Timber.d("Image Load Error"); 
       } 
      }); 
+0

谢谢..它的工作完美 –

+0

比你。你能接受这个答案吗? –

0

的代码被赋予确保路径变量不为空或空

+0

路径不为空,第一次点击的作品..当我去到以前的活动,再次单击它不是加工。在cosole中它不显示空也 –

+0

你可以在这里发布你的代码吗? – AmitCharkha

+0

我在问题中添加了代码@AmitCharkha –