Consumir WebService Android

Tenho um WebService criado em C# para autenticar o usuário[no caso um professor], tenho um codigo que está passando os parâmetros para o web service e caso ele encontre o usuário me devolve os dados dele.

Porem estou fazendo todo esse processo na classe da Activity, só que gostaria de saber como faço para desmembrar este código para uma classe a parte, e toda hora que o usuário fosse fazer o login ele chamava o método na outra classe e passava o parâmetro usuário e a senha caso o web service encontrasse ele me retornaria um objeto do tipo professor.

Código

package feol.com.br.diarioescolar;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;

public class Login extends Activity {


    private Button btEntrar;
    private EditText edUsuario, edSenha;

    private ProgressDialog dialogo;
    String codigo;
    String nome;
    String usuario ;
    String senha ;


    private static String SOAP_ACTION ="http://feol/AutenticarProfessor";
    private static String NAMESPACE = "http://feol/";
    private static String METHOD_NAME= "AutenticarProfessor";
    private static String URL = "http://192.168.43.175/ServiceFeol.asmx?WSDL";


    Professor p = new Professor();
    ProfessorWs ws = new ProfessorWs();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        btEntrar = (Button)findViewById(R.id.btEntrar);
        edUsuario = (EditText)findViewById(R.id.edUsuario);
        edSenha = (EditText)findViewById(R.id.edSenha);

        btEntrar.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                btEntrarOnClick();

            }

        });


    }


    private void  btEntrarOnClick(){
        new asynProf().execute();

    }

    public Boolean invocaWs(){

        Boolean re = true;

        try{
             SoapObject resposta = new SoapObject(NAMESPACE,METHOD_NAME);
             SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
             envelope.dotNet = true;
             resposta.addProperty("user",edUsuario.getText().toString());
             resposta.addProperty("senha",edSenha.getText().toString());
             envelope.setOutputSoapObject(resposta);


             HttpTransportSE http = new HttpTransportSE(URL);
             http.call(SOAP_ACTION,envelope);

            String resultado = envelope.getResponse().toString();
            JSONArray jsonArray = new JSONArray(resultado);


            for(int i=0;i<jsonArray.length();i++ ) {
                JSONObject jsonObject =jsonArray.getJSONObject(i);

                codigo = jsonObject.getString("CodProf");
                nome = jsonObject.getString("Nome");
                usuario = jsonObject.getString("Usuario");
                senha = jsonObject.getJSONObject("Senha").toString();
            }

        } catch (IOException e){
            e.printStackTrace();
            re=false;
        }catch (XmlPullParserException e){
            e.printStackTrace();
            re=false;
        }catch (JSONException e){
            e.printStackTrace();
        }

        return re;

    }

    class asynProf extends AsyncTask<String,String,String> {


        @Override
        protected void onPreExecute(){

            dialogo = new ProgressDialog(Login.this);
            dialogo.setMessage("Carregando codigo...");
            dialogo.setIndeterminate(false);
            dialogo.setCancelable(false);
            dialogo.show();
        }

        @Override
        protected String doInBackground (String... strings){
            if (invocaWs())
            {return "ok";

            }else {return "erro";}

        }

        @Override
        protected void onPostExecute(String s){
            dialogo.dismiss();
            if(s.equals("ok")){
                mostraCod();
            }else {
                Log.e("Script","DeuErrado" + s.toString());}

        }
    }



    public void mostraCod(){
            Toast t = Toast.makeText(getBaseContext(),"Código pro: " +nome, Toast.LENGTH_SHORT);
            t.show();

        }


}

Alan,

public Class WebServiceApi {

	public Usuario invocaWs(String usuário, String senha){

		Usuario retorno = null

		try{
			 SoapObject resposta = new SoapObject(NAMESPACE,METHOD_NAME);
			 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			 envelope.dotNet = true;
			 resposta.addProperty("user", usuario);
			 resposta.addProperty("senha",senha);
			 envelope.setOutputSoapObject(resposta);

			 HttpTransportSE http = new HttpTransportSE(URL);
			 http.call(SOAP_ACTION,envelope);

			String resultado = envelope.getResponse().toString();
			JSONArray jsonArray = new JSONArray(resultado);


			JSONObject jsonObject =jsonArray.getJSONObject(i);

			String codigo  = jsonObject.getString("CodProf");
			String nome    = jsonObject.getString("Nome");
			String usuario = jsonObject.getString("Usuario");
			String senha   = jsonObject.getJSONObject("Senha").toString();
			
			retorno = new Usuario(codigo, nome, usuario, senha)

		} catch (IOException e){
			e.printStackTrace();
			
		}catch (XmlPullParserException e){
			e.printStackTrace();

		}catch (JSONException e){
			e.printStackTrace();
		}

		return retorno;

	}
}

Crie uma outra classe chamada Usuario:

public class Usuario {
	String codigo;
	String nome;
	String usuario ;
	String senha ;	
	
	public Usuario(String codigo, String nome,	String usuario, String senha) {
		codigo  = codigo;
		nome    = nome;
		usuario = usuario;
		senha   = senha;			
	}
	
	//getter e setter
	.
	.
	.
	
}

Daí faz a seguinte chamda dentro do AsyncTask retornando o usuário ao inves de um boolean:

WebServiceApi api = new WebServiceApi();
Usuario usuario = api.invocaWs(edUsuario.getText().toString(), edSenha.getText().toString());

Minha dúvida está justamente em como fazer a chamada na é pegar o retorno AsyncTask. Pois assim que pegasse esses dados do webservice preciso amazernar no bd do SQLite do Android.

class asynProf extends AsyncTask<Void, Void, Usuario> {

        @Override
        protected void onPreExecute(){

            dialogo = new ProgressDialog(Login.this);
            dialogo.setMessage("Carregando codigo...");
            dialogo.setIndeterminate(false);
            dialogo.setCancelable(false);
            dialogo.show();
        }

        @Override
        protected Usuario doInBackground (Void ... param){
			WebServiceApi api = new WebServiceApi();
			Usuario usuario = api.invocaWs(edUsuario.getText().toString(), edSenha.getText().toString());

			return usuario;
        }

        @Override
        protected void onPostExecute(Usuario usuario){
            dialogo.dismiss();
			
            if(usuario != null){
                mostraCod();
				//TODO Salvar o usuario no banco 
				return;
            }
			
            Log.e("Script","DeuErrado");
        }
    }
}

Levi, é o seguinte talvez você possa me dar uma dica dos passos que devo seguir.

Na verdade tenho que criar uma aplicação onde possibilite o professor realizar chamadas através do aplicativo. Tenho 3 métodos no meu web service

Autenticar professor: onde me retorna os seguintes dados:
[CodProfessor], [ NomeProfessor], [Usuario], [Senha] Obs: Recebe como parâmetro o **usuário e a senha**

AlunoProfessor: onde me retorna os seguintes dados:
[MatriculaAluno], [NomeAluno], [CodMateria], [CodTurma] Obs: Recebe como parâmetro o **CodigoProfessor**

DisciplinaProfessor: onde me retorna os seguintes dados:
[CodMateria], [NomeMateria], [CodTurma],Recebe como parâmetro o **CodigoProfessor**

Minha idéia é a seguinte, ao preencher na tela de login o usuário e a senha e pressionar o botão entrar deve ocorrer os seguintes passos.

1 - Invocar o método AutenticarProfessor para receber os dados do professor gravar em uma tabela Professor no SQLite e chamar a segunda Activity onde deve aparecer a lista de disciplinas que o professor leciona.

2 - Porém antes de chamar a segunda Activity devo invocar os métodos AlunoProfessor e DisciplinaProfessor passando como parâmetro o Código do professor autenticado e gravando os dados das disciplinas e dos alunos no SQLite.

Resumindo antes de ir para a segunda Activity preciso de todos os dados consumidos do web service referente ao professor gravados no SQLite. Pois a ideia é que o professor possa fazer a chamada sem está conectado a internet e quando houver conexão a a lista de alunos ausentes será enviada para um método no web service que irei criar posteriormente.