2013-04-24 67 views
0

我有一個真正的問題,我不知道如何解決它, 我嘗試在我的應用程序上使用sharedpreferences來保存listview上的一些項目。 因爲當我沒有互聯網我有我的apllication exeption所以我嘗試保存信息,當我沒有connexion,我使用sharedpreferences,但我不知道如何使用它在主或上我的適配器,因爲我有很多的TextView從主我在這裏的asynchtask:SharedPreferences與列表視圖

class FetchRecentPosts extends AsyncTask<Void, Void, Void> { 

     private ProgressDialog progressDialog; 
     @Override 
     protected void onPreExecute() {   
      super.onPreExecute(); 
      progressDialog = ProgressDialog.show(MainActivity.this, "", getString(R.string.loading_message)); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      articles = Services.getRecentPosts(); 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      for (Article article : articles) { 
       System.out.println(article.getTitle()); 
      } 
      progressDialog.dismiss(); 

      ArticlesAdapter adapter = new ArticlesAdapter(MainActivity.this, R.layout.list_item, articles); 
      articlesList.setAdapter(adapter); 



     } 

,這是我的適配器

public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view = convertView; 
     Article article = getItem(position); 

     if (convertView == null) { 

      view = inflater.inflate(R.layout.list_item, null); 

      image = (ImageView) view.findViewById(R.imageviews.imgArticle); 

      TextView txtArticleTitle = (TextView) view.findViewById(R.textviews.txtArticleTitle); 
      TextView txtArticleExcerpt = (TextView) view.findViewById(R.textviews.txtArticleExcerpt); 
      TextView txtArticleDate = (TextView) view.findViewById(R.id.textArticleDate); 

      txtArticleTitle.setText(ArabicUtilities.reshape(article.getTitle())); 
      txtArticleExcerpt.setText(ArabicUtilities.reshape(article.getExcerpt())); 
      txtArticleDate.setText(article.getDate().toGMTString()); 

      Typeface tf = Typeface.createFromAsset(view.getContext().getAssets(), "fonts/Roboto-Regular.ttf"); 
      txtArticleTitle.setTypeface(tf); 

      imageLoader.displayImage(article.getImg(), image, options); 
     } 
     return view; 
    } 
+1

你想在SharedPreferences保存什麼什麼都?你得到的例外是什麼?究竟是什麼問題? – SimonSays 2013-04-24 16:31:27

+0

我從json返回信息。當我有互聯網時,一切都很好,但是當沒有互聯網時,應用程序停止,我想要保存這些信息,當我開始我的應用程序時顯示最後一條信息,意味着有一個離線應用程序。 – Sherlock 2013-04-24 16:37:52

回答

0

所以我理解你想保存下載的數據從JSON返回到您的應用程序,當你離線啓動它時,你希望它們從shaeredPreferences中出現。

這是我會怎麼做:

首先,如果我沒有連接我不想有一個例外,要麼所以我會檢查,如果應用程序有互聯網連接:

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

數據可能會被保存到sharedPreferences數組中。你可以在http://www.b2creativedesigns.com//sharedpreferences.php瞭解更多。您可能希望每次在線啓動應用程序時清除陣列,然後可以將這些數據保存到這些陣列中。那麼顯然你必須從sharedPreferences數組中讀取信息到列表視圖中。

+0

謝謝你jani,我會試試這個,即使這讓我發瘋:D謝謝你。 – Sherlock 2013-04-24 17:28:25

+0

和我有問題,我應該使用我的適配器或mainActivity的sharedpreferenses?我很困惑 ? – Sherlock 2013-04-24 17:29:08

+0

您應該在您的MainActivity中使用 – 2013-04-24 17:36:04

0

僅供參考,如果你的應用程序中包含建議海量數據的使用,而不是ShatedPreferences SQLite和如果u想工作在離線應用程序,你也可以做一件事

這將幫助你檢查活動數據連接

public boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager 
      .getActiveNetworkInfo(); 
    return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
} 

情況1)如果您有數據連接,您可以通過Web服務調用記錄,並遍歷並裝入每個記錄到數據庫,並編寫一個通用適配器,請確保它會與在線和離線數據工作並將其顯示在列表中或您想要什麼

情況2)如果你沒有有效的數據連接從數據庫讀取記錄,並準備適配器,並在列表中顯示或你想要