java - 使用静态还是非静态是一个好主意? (安卓)

标签 java android static

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

我调用该方法的代码

enviarsolicitud(param1,param2);

这就是我说的void的代码

       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);
        }

我对非静态和静态了解不多,但问题是谷歌对预构建的 Activity 使用静态方法。您是否建议对这种类型的空隙使用静态?我总是使用非静态方法,因为静态方法有很多限制

最佳答案

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

您的问题是何时编写/使用 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"));
}

关于java - 使用静态还是非静态是一个好主意? (安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41813639/

相关文章:

java - 短信发送错误

java - Google 对 Websphere 的反射(reflection) - 无法打开 url 连接

Android XML 字符串 'et cetera' 编码?

android - 无法在android中获取json数组

java - Apache ActiveMQ 非动态连接到主题

java - 带有 Jacoco 插件的 Gradle 1.9 找不到 jacoco 代理

java - 自定义压缩算法的效率

java - 单击对话框时替换另一个 fragment 上方的 fragment (viewpager)

string - 在 Rust 中匹配 Option 静态字符串文字

c - 两个静态变量的相同内存位置分配