0

我有一个真正的问题,我不知道如何解决它,我尝试在我的应用程序上使用 sharedpreferences 将一些项目保存在 listview 上。因为当我没有互联网时,我的应用程序有例外,所以我尝试保存信息以在我没有连接时拥有它,我使用了 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;
    }
4

2 回答 2

0

仅供参考,如果您的应用程序包含大量数据,建议使用 SQLITE 而不是 ShatedPreferences,如果您想离线使用您的应用程序,您也可以做一件事

这将帮助您检查活动的数据连接

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

案例 1)如果您有数据连接从 web 服务调用中获取记录并对其进行迭代并将每条记录插入数据库并编写一个通用适配器,请确保它可以处理在线和离线数据并将其显示在列表或您的任何内容中想

案例2)如果您没有活动数据连接,请从数据库中获取记录并准备适配器并将其显示在列表中或您想要的任何内容中

于 2013-04-26T13:20:16.037 回答
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 数组中的信息读取到列表视图中。

于 2013-04-24T17:01:55.087 回答