簡體   English   中英

使用靜態還是非靜態是個好主意? (Android)

[英]Is it a good idea to use static or nonstatic? (Android)

我正在使用一個簡單的函數來執行從另一個靜態引用調用的HTTP朋友請求。 問題是Google提供的片段系統(“制表瀏覽器活動”)的預構建代碼不允許我在其中使用非靜態方法。

我稱之為方法的代碼

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

我對非靜態和靜態知識不甚了解,但問題是google使用靜態方法進行預建活動。 您是否建議對這種類型的空隙使用靜電? 我總是使用非靜態方法,因為靜態有很多限制

我認為這不是靜態與非靜態的問題。

您的問題是何時編寫/使用AsyncTask。 如果您使用的是HTTP方法,我的建議可能是切換到Volley或OkHttp,但是如果您想繼續沿這條路前進,請繼續閱讀。

建立介面

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

並向sendPostRequest添加一個回調結果的參數,該參數接受POST響應。

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

我的解決方案是:

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

@ cricket_007的最后答案可幫助我改善代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM