2017-01-23 122 views
0

我正在处理一个简单的函数,该函数用于执行另一个静态引用调用的HTTP朋友请求。问题是谷歌提供的(Tab Navigator Activity)预构建代码的片段系统不允许我在那里使用非静态方法。使用静态还是非静态是一个好主意? (Android)

我称之为方法

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

我不知道了很多关于非静态代码和静态,但问题是,谷歌使用静态方法预构建的活动。你是否建议为这种类型的空洞使用静态?我总是使用非静态方法,因为静态是有限的很多

+0

我有点困惑。你的第一个例子不是一种方法。这是一个创建匿名内部类的声明。第二个例子和第一个例子完全不同。 3. Java不允许在方法内部声明类,所以第二个例子甚至不会编译(假设方法本身在另一个类中)。 –

+0

@ Code-Apprentice我可以编译它,在我的代码中没有错误 –

+0

@ Code-Apprentice您实际上可以在方法中创建类。它的愚蠢,但我看过很多帖子似乎认为这应该如何AsyncTasks –

回答

0

该解决方案对我来说是:

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

最后答案通过@ cricket_007帮助我提高我的代码。

1

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

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

我会尽力,谢谢! –

+0

是的,基本上,这是从这个答案的改编http://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is-一个 –

+0

我不知道你试图告诉我什么,但我会建议提取这些参数来分隔变量 –

相关问题