我正在使用一个简单的函数来执行从另一个静态引用调用的 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/