2011-05-16 50 views
0

我刚刚对Fedor的LazyLoading ListView实现了GSON。这意味着应用程序通过ImageLoader类将下载的图像和文本从网络保存到外部存储器。Android:GSON与Fedor的LazyList

我想知道为什么如何让listview无需互联网连接? 该应用程序已成功将缓存数据保存到SD卡,现在如何调用这些文件?所以当没有互联网时,它会从SD卡中调用数据(文本和图像)。

谢谢。我接受任何一种解决方案

,这里是我的ListView类:

public class ProjectsList extends Activity { 
     ListView lstTest; 

     ProjectAdapter arrayAdapter; 

     ArrayList<Project> prjcts=null; 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.projects_list); 

      //Initialize ListView 
      lstTest= (ListView)findViewById(R.id.lstText); 

      prjcts = new ArrayList<Project>(); 

      arrayAdapter = new ProjectAdapter(ProjectsList.this, R.layout.listitems,prjcts,ProjectsList.this); 

       lstTest.setAdapter(arrayAdapter); 
       if (isOnline()) 
       { 
      WebService webService = new WebService("http://liebenwald.spendino.net/admanager/dev/android/projects.json"); 

      Map<String, String> params = new HashMap<String, String>(); 
      params.put("var", ""); 

      String response = webService.webGet("", params); 

      try 
      { 
       Type collectionType = new TypeToken<ArrayList<Project>>(){}.getType(); 
       List<Project> lst= new Gson().fromJson(response, collectionType); 


       for(Project l : lst) 
       { 
        prjcts.add(l); 
        ConstantData.projectsList.add(l); 
       } 

       arrayAdapter.notifyDataSetChanged(); 
      } 
      catch(Exception e) 
      { 
       Log.d("Error: ", e.getMessage()); 
      } 
      } 


      lstTest.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) {    
        Intent care = new Intent(ProjectsList.this, ProjectDetail.class); 
        care.putExtra("spendino.de.ProjectDetail.position",position); 
        startActivity(care); 
       } 
      }); 

     } 
     @Override 
     public void onDestroy() 
     { 
      yAdapter.imageLoader.stopThread(); 
      lstTest.setAdapter(null); 
      super.onDestroy(); 
     } 

     protected boolean isOnline() { 
      ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
      if (netInfo != null && netInfo.isConnected()) { 
       return true; 
      } else { 
        } 
       }); 
       return false; 
      } 
     } 


    } 

回答

1

在ImageLoader的类更改getBitmap()方法,下面的一个

private Bitmap getBitmap(String urlString) 
{ 
    String filename = String.valueOf(urlString.substring(urlString.lastIndexOf("/") + 1)); 
    File f = new File(cacheDir, filename); 
    // from web 
    try 
    { 
     if(!f.exists()) 
     { 
      Bitmap bitmap = null; 
      InputStream is = new URL(urlString).openStream(); 
      OutputStream os = new FileOutputStream(f); 
      Globals.CopyStream(is, os); 
      os.close(); 
      bitmap = decodeFile(f); 
      return bitmap; 
     } 
     else 
     {    
      Bitmap bitmap = decodeFile(f); 
      return bitmap; 
     } 

    } 
    catch (Exception ex) 
    { 
     ex.printStackTrace(); 
     BitmapDrawable mDrawable = (BitmapDrawable) context.getResources().getDrawable(R.drawable.placeholder); 
     return mDrawable.getBitmap(); 
    } 
} 

但是,如果没有连接你将如何知道哪个图像将被加载到哪个位置?

+0

Thx。我可能会尝试。那我不清楚,也许你可以看看上面编辑过的问题,我发布了我的ListView类。我需要在ListView类中添加什么? – hectichavana 2011-05-16 11:30:19

+0

这就是我写在我的答案结束,顺便说一句,如果它的在线,然后保存在SD卡中的整个JSON文件和下一次,如果它不在线,然后从SD卡使用此文件我可能是worong它只是一个想法,因为我没有JSON的EXP – ingsaurabh 2011-05-16 11:41:32

+0

将appPreferences中的JSON响应缓存为字符串。当你连接时替换它,当你不在时使用它。 – 2011-05-16 11:43:56