当前位置: 首页 > 知识库问答 >
问题:

常规类中的getResources,IntentService和Fragment将它们称为函数

司寇高洁
2023-03-14

我有一个常规类(Soap.java),我添加了一个函数来调用一个webservice,我在res/values/strings.xml中有URL和其他信息。

public class SOAP {

    private Context context;

    public SOAP(Context current){
        this.context = current;
    }

    String NAMESPACE = context.getResources().getString(R.string.NAMESPACE);
    String URL = context.getResources().getString(R.string.URL);
    String SOAP_ACTION = context.getResources().getString(R.string.SOAP_ACTION);

    private static String TAG = SOAP.class.getSimpleName();


    public Reponse envoieDemande(String method, String xml) {
        code
    }
}

IntenService:

public class EnvoieService extends IntentService {


    DatabaseHandler db = new DatabaseHandler(this);

    public EnvoieService() {
        super("EnvoieService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {

        List<Demande> demandes = db.getAllDemandesRenvoie();
        String TAG = EnvoieService.class.getSimpleName();

        if (!(demandes.isEmpty())) {
            for (Demande cn : demandes) {
                ...                
                SOAP soap = new SOAP(this);

                Reponse ret = soap.envoieDemande("SendLead", xml);
            }
        } else {
            cancelAlarm();
        }
    }

    public void cancelAlarm() {
        Intent intent = new Intent(getApplicationContext(), EnvoieReceiver.class);
        final PendingIntent pIntent = PendingIntent.getBroadcast(this, EnvoieReceiver.REQUEST_CODE,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
        alarm.cancel(pIntent);
    }
}

片段:

public class DemandeGratuite extends android.support.v4.app.Fragment {
    ...
    {
        {
            {
                {
                    {
                        {
                            {
                                {
                                AsyncSoapCall task = new AsyncSoapCall();
                                task.execute();

                                getChildFragmentManager().popBackStack();
                                mListener.onInteraction(6);

                            } catch (FileNotFoundException e) {
                                System.err.println("FileNotFoundException: " + e.getMessage());
                            } catch (IOException e) {
                                System.err.println("Caught IOException: " + e.getMessage());
                            }
                        }
                    }
                }
        );
    }
    private class AsyncSoapCall extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... params) {
            SOAP soap = new SOAP(getContext());

            Reponse ret = soap.envoieDemande("SendLead", xml);

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            Log.i(TAG, "onPostExecute");
        }

        @Override
        protected void onPreExecute() {
            Log.i(TAG, "onPreExecute");
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            Log.i(TAG, "onProgressUpdate");
        }
    }
}

共有1个答案

姚建树
2023-03-14

不能从服务的上下文访问资源。您必须使用活动的上下文,或者您可以尝试使用这个类

public class App extends Application {
    private static Context mContext;
    public static Resources getResources() {
        return mContext.getResources();
    }
    public void onCreate() {
        super.onCreate();
        mContext = getApplicationContext();
    }
}

然后使用函数app.getresources().getstring(your_string_id)

 类似资料:
  • 问题内容: 我想知道为什么构造函数的名称总是与类名称相同,以及当我们创建该类的对象时如何隐式调用它。任何人都可以在这种情况下解释执行流程吗? 问题答案: 我想知道为什么构造函数的名称总是与类名称相同 因为此语法不需要任何新关键字。除此之外,没有充分的理由。 为了尽量减少新关键字的数量,我没有使用像这样的显式语法: 相反,我选择了反映了一个声明语法 使用 构造函数。 这可能太聪明了。[C ++的设计

  • 本文向大家介绍HTML5规范将元素分为哪几个大类?分别说说它们的特点相关面试题,主要包含被问及HTML5规范将元素分为哪几个大类?分别说说它们的特点时的应答技巧和注意事项,需要的朋友参考一下

  • 我最近注意到Spring在@Configuration类中成功地拦截了类内函数调用,但在常规bean中却没有。 像这样的电话 但是,在下面的示例中,当transactionManager()调用createDataSource()时,它会被正确截获,并调用代理的createDataSource(),而不是unwrapped类的createDataSource(),这可以通过在调试器中查看“this

  • 请帮帮我,为什么我得到的错误函数不存在? [2018-10-31 12:31:05][42883]错误:函数companytester(bigint,未知,未知,未知)不存在 提示:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换。

  • 问题内容: 在Java中,这些之间有什么区别: 我已经多次检查过Javadoc,但这从来不能很好地解释它。我也进行了测试,但没有反映出调用这些方法背后的任何实际含义。 问题答案: 如果不确定某件事,请尝试先编写测试。 我这样做: 印刷品: 最后一个块中有一个空条目,其中返回一个空字符串。 结果是: 该 名称 是您愿意使用动态加载与类,例如,调用的名称与默认。在一定范围内,所有类都有唯一的名称。 该