将android AsyncTask调用转换为单独的类并调用所有活动

将android AsyncTask调用转换为单独的类并调用所有活动,android,web-services,android-layout,android-intent,Android,Web Services,Android Layout,Android Intent,我是android开发新手。我的应用程序中有一个AsyncTask函数。从所有活动调用http请求。现在在每个活动中,我都使用下面的类连接到服务器,在一些活动中,我甚至调用了两次 基本上,我是一名web开发人员,在这种情况下,我们使用一个可以从整个应用程序(web)访问的类,并使用公共函数执行相同的活动。唯一的区别是输入和输出将会改变 我的疑问是,在这种情况下,我可以使用(转换)这个函数或类吗? 我的假设是 创建一个android类(可以从所有活动中访问) 只需为特定服务器生成所需的JSON字符

我是android开发新手。我的应用程序中有一个AsyncTask函数。从所有活动调用http请求。现在在每个活动中,我都使用下面的类连接到服务器,在一些活动中,我甚至调用了两次

基本上,我是一名web开发人员,在这种情况下,我们使用一个可以从整个应用程序(web)访问的类,并使用公共函数执行相同的活动。唯一的区别是输入和输出将会改变

我的疑问是,在这种情况下,我可以使用(转换)这个函数或类吗? 我的假设是

  • 创建一个android类(可以从所有活动中访问)
  • 只需为特定服务器生成所需的JSON字符串(用于服务器中的进程)
  • 只需将创建的json传递给创建的类,然后使http连接即可)
  • 处理从服务器返回的数据
  • 将其传递给相应的活动
  • 这样我可以对所有活动使用相同的函数,避免重复查询

    我可以将此代码转换为这种方式吗

    我的代码

    public class MainActivity extends Activity {
    
    
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            setContentView(R.layout.activity_main);
    
                    LogIN loginUser = new LogIN();
            LoginUser.execute("");
    
    
    }
    
             private class LogIN extends AsyncTask<String, Integer, String> {
    
    
            @Override
            protected String doInBackground(String... sUrl) {
                try {
    
    
            String path = "http://www.domain_name.com/app/checkSession.php";
    
            HttpClient client = new DefaultHttpClient();
            HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); 
    
                    HttpResponse response;
                    JSONObject json = new JSONObject();
                    try {
                        HttpPost post = new HttpPost(path);
                        json.put("access_token", "123456");
    
    
                        post.setHeader("json", json.toString());
                        StringEntity se = new StringEntity(json.toString());
                        se.setContentEncoding((Header) new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                        post.setEntity(se);
    
                  response = client.execute(post);
                        /* Checking response */
                        if (response != null) {
                            InputStream in = response.getEntity().getContent(); 
    
                            String a = convertStreamToString(in);
    
                            JSONObject jsono = stringToJsonobj(a);
                            String passedStringValue = jsono.getString("result");
    
                            if(passedStringValue.equals("1")){
                                flags=1;
                                //Log.v("TAGG", "Success");
                            }
                            else {
                                flags=0;
                                //Log.v("TAGG", "Failed !");
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    
    
    
    
    
    
    
    
                } catch (Exception e) {
                }
                return null;
            }
    
            @Override
            protected void onPreExecute() {
    
    
                super.onPreExecute();
                showDialogue("Login Processing", "Loading");
            }
    
            @Override
            protected void onProgressUpdate(Integer... progress) {
                super.onProgressUpdate(progress);
            }
    
            @Override
            protected void onPostExecute(String result) {
                if(flags.equals(1)){
                Itent homepage = new Intent(MainActivity.this, RegisterDevice.class);
                startActivity(homepage);
                finish();
                }
                else {
                    Intent homepage = new Intent(MainActivity.this, LoginActivity.class);
                    startActivity(homepage);
                    finish();
                }
                super.onPostExecute(result);
            }
    
        }
    
    }
    
    Login loginTask = new Long(getContext());
    loginTask.execute();
    
    public class Login extends AsyncTask<String, Integer, String> {
    
    private Context mContext ;
    private ProgressDialog pd; 
    private Handler handler = new Handler { };
    public Login (Context context){
    mContext = context ;
    }
    .....
    
    公共类MainActivity扩展活动{
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Picture);
    setContentView(R.layout.activity_main);
    LogIN LogIN用户=新登录();
    logiuser.execute(“”);
    }
    私有类登录扩展异步任务{
    @凌驾
    受保护的字符串背景(字符串…sUrl){
    试一试{
    字符串路径=”http://www.domain_name.com/app/checkSession.php";
    HttpClient=new DefaultHttpClient();
    HttpConnectionParams.setConnectionTimeout(client.getParams(),10000);
    HttpResponse响应;
    JSONObject json=新的JSONObject();
    试一试{
    HttpPost=新的HttpPost(路径);
    put(“access_token”,“123456”);
    setHeader(“json”,json.toString());
    StringEntity se=新的StringEntity(json.toString());
    setContentEncoding((标题)新的BasicHeader(HTTP.CONTENT_类型,“application/json”);
    邮政实体(se);
    响应=client.execute(post);
    /*检查响应*/
    if(响应!=null){
    InputStream in=response.getEntity().getContent();
    字符串a=convertStreamToString(in);
    JSONObject jsono=StringToJSONObject(a);
    字符串passedStringValue=jsono.getString(“结果”);
    if(passedStringValue.equals(“1”)){
    旗帜=1;
    //Log.v(“TAGG”,“Success”);
    }
    否则{
    flags=0;
    //Log.v(“TAGG”,“Failed!”);
    }
    }
    }捕获(例外e){
    e、 printStackTrace();
    }
    }捕获(例外e){
    }
    返回null;
    }
    @凌驾
    受保护的void onPreExecute(){
    super.onPreExecute();
    showDialogue(“登录处理”、“加载”);
    }
    @凌驾
    受保护的void onProgressUpdate(整数…进度){
    super.onProgressUpdate(进度);
    }
    @凌驾
    受保护的void onPostExecute(字符串结果){
    如果(标志等于(1)){
    Itent homepage=新意图(MainActivity.this、RegisterDevice.class);
    startActivity(主页);
    完成();
    }
    否则{
    意向主页=新意向(MainActivity.this、LoginActivity.class);
    startActivity(主页);
    完成();
    }
    super.onPostExecute(结果);
    }
    }
    }
    
    请任何人帮助/建议
    提前感谢

    将您的类提取到另一个文件并公开

        public class LogIN extends AsyncTask<Object, Integer, String> {
            private ILoginListener listener;
    
            @Override
            protected String doInBackground(Object... arg0) {
                try {
                   this.listener = (ILoginListener) arg0[0];
                  //You can also send the url in the obj array
                  String theUrl = (String) arg0[1];
    
    
            String path = "http://www.domain_name.com/app/checkSession.php";
    
            HttpClient client = new DefaultHttpClient();
            HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); 
    
                    HttpResponse response;
                    JSONObject json = new JSONObject();
                    try {
                        HttpPost post = new HttpPost(path);
                        json.put("access_token", "123456");
    
    
                        post.setHeader("json", json.toString());
                        StringEntity se = new StringEntity(json.toString());
                        se.setContentEncoding((Header) new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                        post.setEntity(se);
    
                  response = client.execute(post);
                        /* Checking response */
                        if (response != null) {
                            InputStream in = response.getEntity().getContent(); 
    
                            String a = convertStreamToString(in);
    
                            JSONObject jsono = stringToJsonobj(a);
                            String passedStringValue = jsono.getString("result");
    
                            if(passedStringValue.equals("1")){
                                flags=1;
                                //Log.v("TAGG", "Success");
                            }
                            else {
                                flags=0;
                                //Log.v("TAGG", "Failed !");
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    
    
    
    
    
    
    
    
                } catch (Exception e) {
                }
                return null;
            }
    
            @Override
            protected void onPreExecute() {
    
    
                super.onPreExecute();
                showDialogue("Login Processing", "Loading");
            }
    
            @Override
            protected void onProgressUpdate(Integer... progress) {
                super.onProgressUpdate(progress);
            }
    
            @Override
            protected void onPostExecute(String result) {
                listener.logInSessionCheckListener(flag.equals(1));
                super.onPostExecute(result);
            }
    
        }
    
    我在需要postExecute结果的类中实现了接口,在重写的方法中,您可以使用任务的结果实现所需的内容。 您使用它的类将如下所示:

        public interface ILoginListener {
    
            public void logInSessionCheckListener(SomeNeeded Value);
    
         }
    
    public class SomeClass implements ILoginListener { 
    
        //Call it like this from any class:
    
        LogIN loginTask = new LogIn();
    
        Object[] someParams = new Object[2]; 
        //add the listener
        someParams[0] = SomeClass.this
        //add the url 
        someParams[1] = someUrlString;
    
        loginTask.execute(someParams);
    
       @Override
       public void logInSessionCheckListener(SomeNeeded Value){
        //do Stuff with your results
    
       }
    }
    
    new LogIN().execute(urls);
    

    您可以像为doInBackground()方法中的所有内容创建单独的类一样,在所有活动中调用它,并将参数传递给

       LogIN loginUser = new LogIN(yourparameter);
        LoginUser.execute("");
    
    并检查AsyncTask类构造函数中的参数,如

     public LogIN(Myparameter){
            // Your data
          }
    

    另一方面,你可以使用这个很棒的android框架:和。
    它允许您从活动中执行异步网络任务,并轻松处理请求的结果。

    您应该使用接口实现对ui活动的回调。 看看这个线程,它可能很有用: 您的asyntask类应该位于一个单独的java文件中,并具有公共访问权限

    要传递参数,只需调用新的登录异步任务,如下所示:

        public interface ILoginListener {
    
            public void logInSessionCheckListener(SomeNeeded Value);
    
         }
    
    public class SomeClass implements ILoginListener { 
    
        //Call it like this from any class:
    
        LogIN loginTask = new LogIn();
    
        Object[] someParams = new Object[2]; 
        //add the listener
        someParams[0] = SomeClass.this
        //add the url 
        someParams[1] = someUrlString;
    
        loginTask.execute(someParams);
    
       @Override
       public void logInSessionCheckListener(SomeNeeded Value){
        //do Stuff with your results
    
       }
    }
    
    new LogIN().execute(urls);
    

    希望对您有所帮助:)

    记住,您永远无法知道任务何时完成。因此,如果您使用它对用户进行身份验证,然后执行任务X、任务Y或任务Z

    那么也许最好创建一个登录助手类

    公共类登录器{

    public boolean login(params){
        // Authenticate user and return true if successfull
    }
    
    }

    然后在你的活动课上

    私有类X扩展异步任务{

    @Override
    protected String doInBackground(String... sUrl) {
    
        ...
        boolean authenticated = LoginHelper.login(params...);
    
        if(authenticated == true) {
            // Perform task X here...
        } else {
            // Inform the user that the login failed...
        }
    
    }首先 您必须传递调用异步任务的上下文

    示例代码

    public class MainActivity extends Activity {
    
    
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            setContentView(R.layout.activity_main);
    
                    LogIN loginUser = new LogIN();
            LoginUser.execute("");
    
    
    }
    
             private class LogIN extends AsyncTask<String, Integer, String> {
    
    
            @Override
            protected String doInBackground(String... sUrl) {
                try {
    
    
            String path = "http://www.domain_name.com/app/checkSession.php";
    
            HttpClient client = new DefaultHttpClient();
            HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); 
    
                    HttpResponse response;
                    JSONObject json = new JSONObject();
                    try {
                        HttpPost post = new HttpPost(path);
                        json.put("access_token", "123456");
    
    
                        post.setHeader("json", json.toString());
                        StringEntity se = new StringEntity(json.toString());
                        se.setContentEncoding((Header) new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                        post.setEntity(se);
    
                  response = client.execute(post);
                        /* Checking response */
                        if (response != null) {
                            InputStream in = response.getEntity().getContent(); 
    
                            String a = convertStreamToString(in);
    
                            JSONObject jsono = stringToJsonobj(a);
                            String passedStringValue = jsono.getString("result");
    
                            if(passedStringValue.equals("1")){
                                flags=1;
                                //Log.v("TAGG", "Success");
                            }
                            else {
                                flags=0;
                                //Log.v("TAGG", "Failed !");
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    
    
    
    
    
    
    
    
                } catch (Exception e) {
                }
                return null;
            }
    
            @Override
            protected void onPreExecute() {
    
    
                super.onPreExecute();
                showDialogue("Login Processing", "Loading");
            }
    
            @Override
            protected void onProgressUpdate(Integer... progress) {
                super.onProgressUpdate(progress);
            }
    
            @Override
            protected void onPostExecute(String result) {
                if(flags.equals(1)){
                Itent homepage = new Intent(MainActivity.this, RegisterDevice.class);
                startActivity(homepage);
                finish();
                }
                else {
                    Intent homepage = new Intent(MainActivity.this, LoginActivity.class);
                    startActivity(homepage);
                    finish();
                }
                super.onPostExecute(result);
            }
    
        }
    
    }
    
    Login loginTask = new Long(getContext());
    loginTask.execute();
    
    public class Login extends AsyncTask<String, Integer, String> {
    
    private Context mContext ;
    private ProgressDialog pd; 
    private Handler handler = new Handler { };
    public Login (Context context){
    mContext = context ;
    }
    .....
    
    类登录应该有一个接受上下文的构造函数

    示例代码

    public class MainActivity extends Activity {
    
    
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            setContentView(R.layout.activity_main);
    
                    LogIN loginUser = new LogIN();
            LoginUser.execute("");
    
    
    }
    
             private class LogIN extends AsyncTask<String, Integer, String> {
    
    
            @Override
            protected String doInBackground(String... sUrl) {
                try {
    
    
            String path = "http://www.domain_name.com/app/checkSession.php";
    
            HttpClient client = new DefaultHttpClient();
            HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); 
    
                    HttpResponse response;
                    JSONObject json = new JSONObject();
                    try {
                        HttpPost post = new HttpPost(path);
                        json.put("access_token", "123456");
    
    
                        post.setHeader("json", json.toString());
                        StringEntity se = new StringEntity(json.toString());
                        se.setContentEncoding((Header) new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                        post.setEntity(se);
    
                  response = client.execute(post);
                        /* Checking response */
                        if (response != null) {
                            InputStream in = response.getEntity().getContent(); 
    
                            String a = convertStreamToString(in);
    
                            JSONObject jsono = stringToJsonobj(a);
                            String passedStringValue = jsono.getString("result");
    
                            if(passedStringValue.equals("1")){
                                flags=1;
                                //Log.v("TAGG", "Success");
                            }
                            else {
                                flags=0;
                                //Log.v("TAGG", "Failed !");
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    
    
    
    
    
    
    
    
                } catch (Exception e) {
                }
                return null;
            }
    
            @Override
            protected void onPreExecute() {
    
    
                super.onPreExecute();
                showDialogue("Login Processing", "Loading");
            }
    
            @Override
            protected void onProgressUpdate(Integer... progress) {
                super.onProgressUpdate(progress);
            }
    
            @Override
            protected void onPostExecute(String result) {
                if(flags.equals(1)){
                Itent homepage = new Intent(MainActivity.this, RegisterDevice.class);
                startActivity(homepage);
                finish();
                }
                else {
                    Intent homepage = new Intent(MainActivity.this, LoginActivity.class);
                    startActivity(homepage);
                    finish();
                }
                super.onPostExecute(result);
            }
    
        }
    
    }
    
    Login loginTask = new Long(getContext());
    loginTask.execute();
    
    public class Login extends AsyncTask<String, Integer, String> {
    
    private Context mContext ;
    private ProgressDialog pd; 
    private Handler handler = new Handler { };
    public Login (Context context){
    mContext = context ;
    }
    .....
    
    公共类登录扩展异步任务{
    私有上下文;
    私营部门;
    私有处理程序