Java 将方法从mainActivity移动到类文件

Java 将方法从mainActivity移动到类文件,java,android,class,Java,Android,Class,我在mainActivity中有以下方法,但我正在尝试将其移动到单独的类文件中,以便在其他活动中调用它 public void addUser(){ StringRequest stringRequest = new StringRequest(Request.Method.POST, constants.register_URL, new Response.Listener<String>() {

我在mainActivity中有以下方法,但我正在尝试将其移动到单独的类文件中,以便在其他活动中调用它

public void addUser(){


    StringRequest stringRequest = new StringRequest(Request.Method.POST,
            constants.register_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Toast.makeText(getApplicationContext(), response ,Toast.LENGTH_LONG).show();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(getApplicationContext(), error.getMessage() ,Toast.LENGTH_LONG).show();
                }
            }){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String,String> params = new HashMap<>();
            params.put("username", "value");
            params.put("email", "value");
            params.put("password", "value");
            return params;
        }
    };

    requestHandler.getInstance(this).addToRequestQueue(stringRequest);
}
public void addUser(){
StringRequest StringRequest=新StringRequest(Request.Method.POST,
常量.register\u URL,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
Toast.makeText(getApplicationContext(),response,Toast.LENGTH_LONG.show();
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG.show();
}
}){
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(“用户名”、“值”);
参数put(“电子邮件”、“价值”);
参数put(“密码”、“值”);
返回参数;
}
};
requestHandler.getInstance(this).addToRequestQueue(stringRequest);
}
我创建了一个名为“AQLCALL”的类,并尝试将此方法和其他方法放入其中,但我不知道如何做到这一点。。
谢谢你的帮助

我觉得你看起来像这样:

public class aqlCalls {

   public static void addUser(Context context) {
       StringRequest stringRequest = new StringRequest(Request.Method.POST, constants.register_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
                }
            }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("username", "value");
            params.put("email", "value");
            params.put("password", "value");
            return params;
        }
       };
       requestHandler.getInstance(context).addToRequestQueue(stringRequest);
   }
}

我认为这就是您要寻找的。

您可以创建自己的侦听器来与活动通信,并将方法设置为静态并保存在类中,传递上下文并在请求调用中使用它

public static void addUser(Context context, AddUserListener listener){
...
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                listener.onSucces(response);
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                listener.onError(error.getMessage())
            }
        })
最后,在活动中,请执行以下操作:

MyClass.addUser(getApplicationContext(), new AddUserListener {
   @Override
   void onSuccess(String response){
      ... //Toast.makeText(...)
   }
   @Override
   void onError(String message){
      ...//Toast.makeText(...)
   }
});
注意:
如果你在帖子中收到任何异常,请写下,也许你会收到一个与主线程相关的异常,我认为你需要首先尝试找到确切的问题

根据您方法中的代码,我猜问题在于
Toast
。如果要在活动之外使用Toast,则需要将上下文传递给此方法。如果你搜索“android toast outside activity”,你会得到很多类似的问题。比如

我建议在addUser()中添加一个新参数,并使用上下文显示Toast

使用此方法时,将上下文(如
getApplicationContext()
)传递给该方法

比如说

void addUser(Context mcontext){
   //all the toast usage change to 
   Toast.makeText(mContext, ....)
}

解释“但我不知道怎么做”。你面临什么问题?第一步是复制代码(我想你已经找到了)。@codeMagic我有很多错误,但我已经修复了它们最后一个错误是“无法解析方法getApplicationContext”@OmarAlhadidy有任何答案可以帮助你找到解决方案吗?请接受适合你的答案@OmarAlhadidy谢谢你的答案,但是有一个错误是“无法解析方法getApplicationContext”,你知道为什么吗?我想是因为该方法是静态的。可能尝试将“GetApplicationContext()”替换为此“上下文”
MyClass.addUser(getApplicationContext(), new AddUserListener {
   @Override
   void onSuccess(String response){
      ... //Toast.makeText(...)
   }
   @Override
   void onError(String message){
      ...//Toast.makeText(...)
   }
});
void addUser(Context mcontext){
   //all the toast usage change to 
   Toast.makeText(mContext, ....)
}