我正在使用一个简单的函数来执行我从另一个静态引用调用的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);
}
我不太了解非静态和静态,但问题是谷歌使用静态方法进行预建活动。你是否建议对这种类型的空隙使用静电?我总是使用非静态方法,因为静态限制很多
答案 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的最后答案帮助我改进了我的代码。