Как я могу загрузить новую активность после входа в студию android? - PullRequest
0 голосов
/ 07 мая 2020

По сути, я хочу начать новое действие после входа в систему с использованием базы данных. Как я могу это сделать?

Это мой класс входа в систему

public class login extends AppCompatActivity {

    EditText username;
    EditText password;
    Button btn_login;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        username = (EditText) findViewById(R.id.username);
        password = (EditText) findViewById(R.id.password);
        btn_login = (Button) findViewById(R.id.btn_login);

        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String user = username.getText().toString();
                String pass = password.getText().toString();
                String type = "login";
                System.out.println("IN Onclick login");
                BackgroundTask backgroundTask = new BackgroundTask(getApplicationContext());
                backgroundTask.execute(type,user,pass);

                  if(backgroundTask.statusOK.equals("true"))     {
                      Intent loginIntent = new Intent(login.this,loggedIn.class);
                      startActivity(loginIntent);
                  }

            }




        });


    }


}

Вы можете видеть в приведенном выше коде, что я использую этот код, чтобы начать свою новую деятельность после успешного входа в систему, но это не начало нового действия. Я не знаю почему?

if(backgroundTask.statusOK.equals("true"))     {
                      Intent loginIntent = new Intent(login.this,loggedIn.class);
                      startActivity(loginIntent);
                  }

Это класс BackgroundTask

public class BackgroundTask extends AsyncTask<String, String, String> {


    Context context;
    public String statusOK="false";




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

    }


    @Override
    protected String doInBackground(String... strings) {
          System.out.println("In doin");
        String type = strings[0];
        String loginURL = "http://192.168.10.119/log/login.php";
        String regURL = "http://192.168.10.119/log/log.php";

        if(type.equals("reg")){
            String name = strings[1];
            String pass = strings[2];
            try{
                URL url = new URL(regURL);
                try {
                    HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
                    httpURLConnection.setRequestMethod("POST");
                    httpURLConnection.setDoOutput(true);
                    httpURLConnection.setDoInput(true);
                    OutputStream outputStream = httpURLConnection.getOutputStream();
                    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream,"UTF-8");
                    BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);

                    String insert_data = URLEncoder.encode("Username","UTF-8")+"="+URLEncoder.encode(name,"UTF-8")+
                            "&"+URLEncoder.encode("Password","UTF-8")+ "=" +URLEncoder.encode(pass,"UTF-8");

                    bufferedWriter.write(insert_data);
                    bufferedWriter.flush();
                    bufferedWriter.close();

                    InputStream inputStream = httpURLConnection.getInputStream();
                    InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"ISO-8859-1");
                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                    String result="";
                    String line="";
                    StringBuilder stringBuilder = new StringBuilder();

                    while((bufferedReader.readLine())!= null){
                        stringBuilder.append(line).append("\n");
                    }
                    result = stringBuilder.toString();
                    bufferedReader.close();
                    inputStream.close();
                    httpURLConnection.disconnect();
                    return result;




                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
        }
        else if(type.equals("login")){
            System.out.println("In type = login");
            String name1 = strings[1];
            String pass1 = strings[2];
            try{
                URL url = new URL(loginURL);
                try {
                    System.out.println("In type = login try");
                    HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
                    httpURLConnection.setRequestMethod("POST");
                    httpURLConnection.setDoOutput(true);
                    httpURLConnection.setDoInput(true);
                    OutputStream outputStream = httpURLConnection.getOutputStream();
                    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream,"UTF-8");
                    BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);

                    String login_data = URLEncoder.encode("Username","UTF-8")+"="+URLEncoder.encode(name1,"UTF-8")+
                            "&"+URLEncoder.encode("Password","UTF-8")+ "=" +URLEncoder.encode(pass1,"UTF-8");

                    bufferedWriter.write(login_data);
                    bufferedWriter.flush();
                    bufferedWriter.close();

                    InputStream inputStream = httpURLConnection.getInputStream();
                    InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"ISO-8859-1");
                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                    String result="";
                    String line="";
                    StringBuilder stringBuilder = new StringBuilder();

                    while((bufferedReader.readLine())!= null){
                        stringBuilder.append(line).append("\n");
                    }
                    result = stringBuilder.toString();
                    bufferedReader.close();
                    inputStream.close();
                    httpURLConnection.disconnect();

                    return result;



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



        return null;

    }


    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(String s) {
        statusOk="true";

        Toast.makeText(context, "Successful", Toast.LENGTH_LONG).show();


        //super.onPostExecute(s);
    }



}

Я проверил, что соединение между базой данных и моим приложением установлено, и приложение работает без ошибок.

Вы можете видеть в приведенном выше коде, что я создал publi c переменную statusOk и инициализировал ее с помощью "false". Эта переменная сообщает классу входа , что пользователь ввел свои правильные учетные данные.

Вы можете видеть, что я изменил значение statusOk на "true" onPostExexute метод.

Теперь проблема в том, что мое новое действие не открывается из класс входа в систему после успешного входа в систему. Пожалуйста, дайте мне решение, как я могу открыть новое действие после входа в систему с правильными учетными данными.

1 Ответ

0 голосов
/ 07 мая 2020

Asynctask используется для выполнения задачи в фоновом потоке (а не в основном потоке, из которого вы вызвали execute()).

Следовательно, в вашем коде оператор if выполняется сразу после того, как вы называется execute(), который по-прежнему сохраняет переменную statusOK как false. Следовательно, условие неверно.

Метод postExecute() asynctask используется для выполнения кода в основном потоке,

Мое предложение : удалите условие if из класса Login , и проверьте условие if в postExecute(),

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...