2014-05-01 90 views
1

嘿我在我的Android应用程序中使用UniversalImageLoader目前它是从天气api加载图像,但每当我得到新的数据图像加载器不加载新的图像。通用图像加载器只加载初始图像任何新图像不加载

这就是我希望它在api返回数据时工作的原因,ImageLoader从url加载图像,当我得到新数据时,新图像被加载到旧图像所在的相同位置。我如何确保Image Loader始终在我的应用程序中加载新的url。

这里是我的代码:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.weather, container, false); 
    int i = getArguments().getInt(ARG_MENU_NUMBER); 
    String titleString = getResources().getStringArray(R.array.drawer_menu)[i]; 
    getActivity().setTitle(titleString); 

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
      getActivity()).build(); 
    ImageLoader.getInstance().init(config); 

    options = new DisplayImageOptions.Builder() 
      .displayer(new RoundedBitmapDisplayer(2)).build(); 
    return view; 
} 
public void processJson(String json) { 
    w.setText("Wind Speed"); 
    ws.setText("Wind Direction"); 
    hu.setText("Humidity"); 
    pr.setText("Pressure"); 
    String weatherDescription = null; 
    String weatherUrl = null; 
    Calendar calender = Calendar.getInstance(); 



    try { 
     JSONObject jObj = new JSONObject(json); 
      JSONObject jobject = jObj.getJSONObject("data"); 
      JSONArray jarrayConditions = jobject.getJSONArray("current_condition"); 
      for(int i = 0;i < jarrayConditions.length();i++){ 
       JSONObject jobject2 = jarrayConditions.getJSONObject(i); 
       String tempc = jobject2.getString("temp_C"); 
       String windSpeed = jobject2.getString("windspeedKmph"); 
       String windDirections = jobject2.getString("winddirDegree"); 
       String airHumidity = jobject2.getString("humidity"); 
       String airPressure = jobject2.getString("pressure"); 
       for(int j = 0; j < jobject2.getJSONArray("weatherDesc").length();j++){ 
        weatherDescription = jobject2.getJSONArray("weatherDesc").getJSONObject(j).getString("value"); 

       } 
       wind.setText(windSpeed+ " m/s"); 
       windDirection.setText(windDirections+ "\u00B0"); 
       humidity.setText(airHumidity+ " %"); 
       pressure.setText(airPressure+ " hPa"); 
       weather.setText(weatherDescription); 
       temp.setText(new DecimalFormat("#").format(jarrayConditions.getJSONObject(i).getDouble("temp_C")) 
         + "\u2103"); 
      } 
      JSONArray jarrayWeather = jobject.getJSONArray("weather"); 
      for(int i = 0;i < jarrayWeather.length();i++){ 
       JSONObject jobject3 = jarrayWeather.getJSONObject(i); 
       String daysTempsH = jobject3.getString("tempMaxC"); 
       String daysTempsL = jobject3.getString("tempMinC"); 
       String date = jobject3.getString("date"); 
       for(int j = 0; j < jobject3.getJSONArray("weatherIconUrl").length();j++){ 
        weatherUrl = jobject3.getJSONArray("weatherIconUrl").getJSONObject(j).getString("value"); 

       } 
       mArrayHigh.add(daysTempsH); 
       mArrayLow.add(daysTempsL); 
       mArrayImage.add(weatherUrl); 
       mArrayDate.add(date); 
      } 

      min.setText("L "+mArrayLow.get(0)+ "\u2103"); 
      max.setText("H "+mArrayHigh.get(0)+ "\u2103"); 

      tvDay1L.setText("L "+mArrayLow.get(1)+ "\u2103"); 
      tvDay1H.setText("H "+mArrayHigh.get(1)+ "\u2103"); 
      calender.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(mArrayDate.get(1))); 
      tvDay1.setText(getDayOfWeek(calender.get(Calendar.DAY_OF_WEEK))); 

      String imageUrl1 = mArrayImage.get(1); 

      ImageLoader.getInstance() 
        .displayImage(imageUrl1, day1Icon, options); 


      tvDay2L.setText("L "+mArrayLow.get(2)+ "\u2103"); 
      tvDay2H.setText("H "+mArrayHigh.get(2)+ "\u2103"); 
      calender.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(mArrayDate.get(2))); 
      tvDay2.setText(getDayOfWeek(calender.get(Calendar.DAY_OF_WEEK))); 
      String imageUrl2 = mArrayImage.get(2); 
      ImageLoader.getInstance() 
        .displayImage(imageUrl2, day2Icon, options); 
      tvDay3L.setText("L "+mArrayLow.get(3)+ "\u2103"); 
      tvDay3H.setText("H "+mArrayHigh.get(3)+ "\u2103"); 
      calender.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(mArrayDate.get(3))); 
      tvDay3.setText(getDayOfWeek(calender.get(Calendar.DAY_OF_WEEK))); 
      String imageUrl3 = mArrayImage.get(2); 
      ImageLoader.getInstance() 
        .displayImage(imageUrl3, day3Icon, options); 
      tvDay4L.setText("L "+mArrayLow.get(4)); 
      tvDay4H.setText("H "+mArrayHigh.get(4)); 
      calender.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(mArrayDate.get(4))); 
      tvDay4.setText(getDayOfWeek(calender.get(Calendar.DAY_OF_WEEK))); 
      String imageUrl4 = mArrayImage.get(4); 
      ImageLoader.getInstance() 
        .displayImage(imageUrl4, day4Icon, options); 

    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

回答

0

嘿,我想通了这一点,通过更新到最新发布的通用图像加载器和简单相加这几行代码

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
      getActivity()).build(); 
    ImageLoader.getInstance().init(config); 

    options = new DisplayImageOptions.Builder() 
    .showImageOnLoading(android.R.color.transparent) 
    .showImageForEmptyUri(R.drawable.cloud) 
    .showImageOnFail(R.drawable.cloud).cacheInMemory(true) 
    .cacheOnDisk(true).bitmapConfig(Bitmap.Config.RGB_565).build(); 
2

请改变你的DisplayOptions这样试试吧

options = new DisplayImageOptions.Builder() 
      .showImageOnLoading(android.R.color.transparent) 
      .showImageForEmptyUri(R.drawable.ic_empty) 
      .showImageOnFail(R.drawable.ic_empty).cacheInMemory(true) 
      .cacheOnDisc(true).bitmapConfig(Bitmap.Config.RGB_565).build(); 
+0

感谢您的回答,但它没有工作 – user1534409

+1

工作d对我来说:) – NarendraJi