将方法从mainActivity移动到类文件

时间:2017-05-31 19:01:23

标签: java android class

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

我已经创建了一个名为'aqlCalls'的类,并试图将这个和其他方法放在里面,但我无法想象如何做到这一点.. 任何帮助表示赞赏..

3 个答案:

答案 0 :(得分:1)

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

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

听众应该是:

public interface AddUserListener{
    void onSuccess(String response);
    void onError(String message)
}

最后在活动中这样做:

MyClass.addUser(getApplicationContext(), new AddUserListener {
   @Override
   void onSuccess(String response){
      ... //Toast.makeText(...)
   }
   @Override
   void onError(String message){
      ...//Toast.makeText(...)
   }
});

<强> 注意: 如果您在帖子中收到任何异常,请写下您可能会收到与MainThread相关的例外

答案 1 :(得分:1)

我认为你需要首先尝试找到确切的问题。

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

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

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

例如

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

答案 2 :(得分:0)

我觉得你看起来像这样:

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 class OtherClass{
   static void yourMethode() {
      aqlCalls.addUser();
   }
}

我认为这就是你要找的东西。