【问题标题】:How can I access resources of the library如何访问图书馆的资源
【发布时间】:2015-02-03 15:23:12
【问题描述】:

我正在尝试创建一个提供 AsyncTask 操作的 Android 库。我创建了我的 AsyncTask 如下。但是,我不知道如何访问图书馆的资源。上下文字段由使用该库的活动设置。我曾经通过调用 getActivity().getResources() 来访问资源。但是这个 AsyncTask 的上下文来自使用它的项目,我不知道如何访问库的资源。我怎样才能做到这一点?

public class CheckBalanceAsyncTask extends AsyncTask<Void, Void, Void> {
private Context mContext;
String json;
JSONObject jsonObject,jsonObjResult;
JSONArray jsonArray;
String message,balance;
ProgressDialog progress;
    public CheckBalanceAsyncTask (Context context){
         mContext = context;
         //progress = new ProgressDialog(mContext);
    }


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
//          progress.setCancelable(false);
//          progress.setMessage("please wait");//getString(R.string.pleasewait));
//          progress.setTitle("waiting");//getString(R.string.loading));
//          progress.setIcon(R.drawable.ic);
//          progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
//          progress.setProgress(0);
//          progress.setMax(100);
//          progress.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            String aliasNo = "";

            PackageInfo pinfo = null;
            try {
                pinfo = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
            } catch (NameNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            String versionName = pinfo.versionName;

            String cardServiceUrl = "blabla";
            Log.e("LOGGGGG", cardServiceUrl);

            try {
                json = JSONParser.getJSONFromUrl(cardServiceUrl);
                try {
                    jsonObject = new JSONObject(json);
                } catch (JSONException e) {
                    Log.e("JSON Parser",
                            "Error creating json object" + e.toString());
                }
                jsonArray = jsonObject.getJSONArray("cardlist");

                jsonObjResult = jsonObject.getJSONObject("result");

                message = jsonObjResult.get("message").toString();

                Log.e("MESSAGE", "" + message);

                JSONObject row = jsonArray.getJSONObject(0);

                balance = row.optString("balance");

            }

            catch (JSONException e) {

                Log.e("json", "doInBackground2");
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void args) {
            //progress.dismiss();

            try {
                if (jsonObjResult.get("message").toString()
                        .equalsIgnoreCase("ok")) {
                    Toast.makeText(mContext, balance+" TL", Toast.LENGTH_SHORT).show();
                }

                else {
                    Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

【问题讨论】:

  • 库是指??Facebook sdk等
  • 你想要图书馆项目中图书馆项目的上下文吗?如果是这样,那么不要使用使用该库的项目提供的 mContext,只需通过使用 this 或 getContext() 来使用您自己的上下文
  • 我只为我的项目调用库中的这个 AsynTask 类,我无法从 AsynTask 类访问库的资源。 getContext,这在 AsyncTask 类中没有定义。

标签: android jar android-asynctask android-resources android-library


【解决方案1】:

然后资源会自动与主应用程序合并,无需执行特定的操作来访问字符串、可绘制对象、布局等... getActivity().getResources() 可以正常工作。

【讨论】:

  • 比如我需要调用getString(R.string.server);在异步任务中。但是,我无权访问图书馆的上下文。使用 mContext 我只能访问使用该库的项目上下文。如何在 AsyncTask 中访问库自己的上下文?
  • @FigenGüngör 您应该将上下文发送到 AsyncTask 的构造函数
  • @FigenGüngör 通过应用程序的上下文,您可以访问图书馆资源。当应用程序编译时,R.string.server 将被合并到应用程序的资源中。然后,通过应用程序的上下文,您可以访问此字符串。
猜你喜欢
  • 2016-03-16
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 2021-11-23
  • 2015-09-04
  • 1970-01-01
相关资源
最近更新 更多