使用静态还是非静态是一个好主意? (机器人)

时间:2017-01-23 18:56:47

标签: java android static

我正在使用一个简单的函数来执行我从另一个静态引用调用的HTTP好友请求。问题是谷歌提供的片段系统(Tab Navigator Activity)预建代码不允许我在那里使用非静态方法。

我称之为方法的代码

enviarsolicitud(param1,param2);

这是我说的空白代码

       private static void enviarsolicitud(final String idadder, final String idadded) 
       {
            class EnviarSolicitudClass extends AsyncTask<String,Void,String> 
            {
                @Override
                protected void onPreExecute()
                {
                    super.onPreExecute();
                    System.out.println("enter");
                }
                @Override
                protected void onPostExecute(String s)
                {
                    super.onPostExecute(s);
                    if(s.contains("friendrequest")){
                        String[] friendrequest = s.split(":");
                        System.out.println(friendrequest[0] + " " + friendrequest[1]);
                    }
                    else if (s.contains("friendrequestcant"))
                    {

                    }
                    else
                    {

                    }
                }
                @Override
                //En segon pla
                protected String doInBackground(String... params)
                {
                    HashMap<String,String> dades = new HashMap<>();
                    dades.put("idadder",params[0]);
                    dades.put("idadded",params[1]);
                    RegisterUserClass ruc = new RegisterUserClass();
                    String resultat = ruc.sendPostRequest("http://www.myurl.net/friend.php",dades);
                    return resultat;
                }

            }
            EnviarSolicitudClass esc = new EnviarSolicitudClass();
            esc.execute(idadder,idadded);
        }

我不太了解非静态和静态,但问题是谷歌使用静态方法进行预建活动。你是否建议对这种类型的空隙使用静电?我总是使用非静态方法,因为静态限制很多

2 个答案:

答案 0 :(得分:1)

我不认为这是静态与非静态的问题。

您的问题是何时编写/使用AsyncTask。如果您使用HTTP方法,我的建议可能会切换到Volley或OkHttp,但如果您想继续沿着这条路走,请继续阅读。

制作界面

public interface StringCallback {
    void onResponse(String result);
}

并将回调结果的参数添加到接受POST响应的sendPostRequest

private void enviarsolicitud(final String idadder, final String idadded) {

    HashMap<String,String> dades = new HashMap<>();
    dades.put("idadder",params[0]);
    dades.put("idadded",params[1]);
    RegisterUserClass ruc = new RegisterUserClass();

    ruc.sendPostRequest("http://www.myurl.net/friend.php",dades,new StringCallback() {
        @Override
        public void onResponse(String response) {
            // Continue with UI logic here
        }
    });

    // Can't use HTTP response here
}

对于sendPostRequest,您使用AsyncTask或任何您想要的HTTP框架,并在返回时“传回”响应。

public void sendPostRequest(final String url, final HashMap<String, String> params, final StringCallback callback) {
    new AsyncTask<String, Void, String>() {

        @Override
        public String doInBackground(String... params) {
            // TODO: HTTP things
        }

        @Override
        protected void onPostExecute(String s)
        {
            super.onPostExecute(s);
            if (callback != null) {
                callback.onResponse(s);
            }
            return; // Done here
    }.execute(params.get("idadder"), params.get("idadded"));
}

答案 1 :(得分:0)

我的解决方案是:

new HomeActivity().enviarsolicitud(param1,param2);

@ cricket_007的最后答案帮助我改进了我的代码。