如何制作onPreExecute()?

时间:2016-11-26 12:49:45

标签: android

我正在工作如何在登录和注册后显示警告不同的消息。 由于onPreExecute(),它在登录后显示Login success alertDialog,并进行注册。 我试图使用异常,但我失败了。 我该怎么做呢?

这是BackgroundTask.java

public class BackgroundTask extends AsyncTask<String,Void,String> {
    AlertDialog alertDialog;
    Context ctx;

    BackgroundTask(Context ctx) {
        this.ctx = ctx;
    }

    protected void onPreExecute() {
            alertDialog = new AlertDialog.Builder(ctx).create();
            alertDialog.setTitle("Loading");
            alertDialog.setMessage("Load Success");
            alertDialog.show();
    }

    @Override
    protected String doInBackground(String... params) {
        String reg_url = "http://35.160.135.119/webapp/register.php";
        String login_url = "http://35.160.135.119/webapp/login.php";
        String method = params[0];
        if (method.equals("register")) {
            String user = params[1];
            String user_name = params[2];
            String user_pass = params[3];
            try {
                URL url = new URL(reg_url);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.setRequestMethod("POST");
                httpURLConnection.setDoOutput(true);
                //httpURLConnection.setDoInput(true);
                OutputStream OS = httpURLConnection.getOutputStream();
                BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8"));
                String data = URLEncoder.encode("user", "UTF-8") + "=" + URLEncoder.encode(user, "UTF-8") + "&" +
                        URLEncoder.encode("user_name", "UTF-8") + "=" + URLEncoder.encode(user_name, "UTF-8") + "&" +
                        URLEncoder.encode("user_pass", "UTF-8") + "=" + URLEncoder.encode(user_pass, "UTF-8");
                bufferedWriter.write(data);
                bufferedWriter.flush();
                bufferedWriter.close();
                OS.close();
                InputStream IS = httpURLConnection.getInputStream();
                IS.close();
                //httpURLConnection.connect();
                httpURLConnection.disconnect();
                return "Registration Success...";
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else if (method.equals("login")) {
            String login_name = params[1];
            String login_pass = params[2];
            try {
                URL url = new URL(login_url);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.setRequestMethod("POST");
                httpURLConnection.setDoOutput(true);
                httpURLConnection.setDoInput(true);
                OutputStream outputStream = httpURLConnection.getOutputStream();
                BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
                String data = URLEncoder.encode("login_name", "UTF-8") + "=" + URLEncoder.encode(login_name, "UTF-8") + "&" +
                        URLEncoder.encode("login_pass", "UTF-8") + "=" + URLEncoder.encode(login_pass, "UTF-8");
                bufferedWriter.write(data);
                bufferedWriter.flush();
                bufferedWriter.close();
                outputStream.close();
                InputStream inputStream = httpURLConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"));
                String response = "";
                String line = "";
                while ((line = bufferedReader.readLine()) != null) {
                    response += line;
                }
                bufferedReader.close();
                inputStream.close();
                httpURLConnection.disconnect();
                return response;
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(String result) {
        if (result.equals("Registration Success...")) {
            Toast.makeText(ctx, result, Toast.LENGTH_LONG).show();
        } else {
            alertDialog.setMessage(result);
            alertDialog.show();
        }
    }
}

这是LoginActivity。

public class LoginActivity extends Activity {
    EditText ET_NAME,ET_PASS;
    String login_name,login_pass;

    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ET_NAME = (EditText)findViewById(R.id.user_name);
        ET_PASS = (EditText)findViewById(R.id.user_pass);
    }
    public void userReg(View view)
    {
        startActivity(new Intent(this,Register.class));
    }
    public void userLogin(View view)
    {
        login_name = ET_NAME.getText().toString();
        login_pass = ET_PASS.getText().toString();
        String method = "login";
        BackgroundTask backgroundTask = new BackgroundTask(this);
        backgroundTask.execute(method,login_name,login_pass);

        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("ID", login_name);
        intent.putExtra("PW", login_pass);
        startActivity(intent);
    }
}

这是Register类。

public class Register extends Activity {
    EditText ET_NAME, ET_USER_NAME, ET_USER_PASS;
    String user, user_name, user_pass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register_layout);
        ET_NAME = (EditText) findViewById(R.id.user);
        ET_USER_NAME = (EditText) findViewById(R.id.new_user_name);
        ET_USER_PASS = (EditText) findViewById(R.id.new_user_pass);
    }

    public void userReg(View view) {
        user = ET_NAME.getText().toString();
        user_name = ET_USER_NAME.getText().toString();
        user_pass = ET_USER_PASS.getText().toString();
        String method = "register";
        BackgroundTask backgroundTask = new BackgroundTask(this);
        backgroundTask.execute(method, user, user_name, user_pass);
        finish();
    }
}

2 个答案:

答案 0 :(得分:0)

抱歉,你做错了。在执行长时间运行之前要完成的事情。例如,显示ProgessDialog。

protected void onPreExecute() {
  ProgressDialog progress = ProgressDialog.show(this, "dialog title",
    "dialog message", true);
  progress.show();
}

@Override
protected String doInBackground(String... params) {
  String reg_url = "http://35.160.135.119/webapp/register.php";
  String login_url = "http://35.160.135.119/webapp/login.php";
  String method = params[0];
  if (method.equals("register")) {
    String user = params[1];
    String user_name = params[2];
    String user_pass = params[3];
    try {
      URL url = new URL(reg_url);
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
      httpURLConnection.setRequestMethod("POST");
      httpURLConnection.setDoOutput(true);
      //httpURLConnection.setDoInput(true);
      OutputStream OS = httpURLConnection.getOutputStream();
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8"));
      String data = URLEncoder.encode("user", "UTF-8") + "=" + URLEncoder.encode(user, "UTF-8") + "&" +
        URLEncoder.encode("user_name", "UTF-8") + "=" + URLEncoder.encode(user_name, "UTF-8") + "&" +
        URLEncoder.encode("user_pass", "UTF-8") + "=" + URLEncoder.encode(user_pass, "UTF-8");
      bufferedWriter.write(data);
      bufferedWriter.flush();
      bufferedWriter.close();
      OS.close();
      InputStream IS = httpURLConnection.getInputStream();
      IS.close();
      //httpURLConnection.connect();
      httpURLConnection.disconnect();
      return "Registration Success...";
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  } else if (method.equals("login")) {
    String login_name = params[1];
    String login_pass = params[2];
    try {
      URL url = new URL(login_url);
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
      httpURLConnection.setRequestMethod("POST");
      httpURLConnection.setDoOutput(true);
      httpURLConnection.setDoInput(true);
      OutputStream outputStream = httpURLConnection.getOutputStream();
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
      String data = URLEncoder.encode("login_name", "UTF-8") + "=" + URLEncoder.encode(login_name, "UTF-8") + "&" +
        URLEncoder.encode("login_pass", "UTF-8") + "=" + URLEncoder.encode(login_pass, "UTF-8");
      bufferedWriter.write(data);
      bufferedWriter.flush();
      bufferedWriter.close();
      outputStream.close();
      InputStream inputStream = httpURLConnection.getInputStream();
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"));
      String response = "";
      String line = "";
      while ((line = bufferedReader.readLine()) != null) {
        response += line;
      }
      bufferedReader.close();
      inputStream.close();
      httpURLConnection.disconnect();
      return response;
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  return null;
}

@Override
protected void onProgressUpdate(Void... values) {
  super.onProgressUpdate(values);
}

@Override
protected void onPostExecute(String result) {
  if (result.equals("Registration Success...")) {
    Toast.makeText(ctx, result, Toast.LENGTH_LONG).show();
  } else {
    alertDialog = new AlertDialog.Builder(ctx).create();
    alertDialog.setTitle("Loading");
    alertDialog.setMessage("Load Success");
    alertDialog.show();
    alertDialog.setMessage(result);
    alertDialog.show();
  }
}

答案 1 :(得分:0)

您可以使用constructor中的BackgroundTask来指定您要拨打的服务。

public class BackgroundTask extends AsyncTask<String,Void,String> {
    AlertDialog alertDialog;
    Context ctx;
    String request;
    public static final int TYPE_LOGIN = 1;
    public static final int TYPE_REGISTER = 2;
    private int type;

    BackgroundTask(Context ctx, int type) {
        this.ctx = ctx;
        this.type = type;
    }

    protected void onPreExecute() {
        alertDialog = new AlertDialog.Builder(ctx).create();
        if(type == TYPE_LOGIN){
            alertDialog.setTitle("Loading");
            alertDialog.setMessage("Logging you in");
        } else if (type == TYPE_REGISTER) {
            alertDialog.setTitle("Loading");
            alertDialog.setMessage("Registering your account");
        }
        alertDialog.show();
    }

    @Override
    protected void onPostExecute(String result) {
        alertDialog.setTitle("Success");
        if(type == TYPE_LOGIN){
            alertDialog.setMessage("Login Success");
        } else if (type == TYPE_REGISTER) {
            alertDialog.setMessage("Registration Success");
        }
        alertDialog.show();
        ...
    }
}

登录请求的用法,

BackgroundTask backgroundTask = new BackgroundTask(this, BackgroundTask.TYPE_LOGIN);

注册请求的用法,

BackgroundTask backgroundTask = new BackgroundTask(this, BackgroundTask.TYPE_REGISTER);