android studio和mysql-SharedReferences?

pinkon5k  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(345)

嗨,所以我想弄清楚sharedpreferences在我的android应用程序中是如何工作的,因为我的登录过程是由另一个java活动处理的。我有一个“记住我”复选框,我想实现。
主活动-登录页

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

EditText UsernameEt, PasswordEt;
CheckBox rem_userpass;

String lastChar = " ";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    UsernameEt = (EditText)findViewById(R.id.etUserName);
    PasswordEt = (EditText)findViewById(R.id.etPassword);
    rem_userpass = (CheckBox)findViewById(R.id.rem_userpass);

    PasswordEt.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            int digits = PasswordEt.getText().toString().length();
            if (digits > 1)
                lastChar = PasswordEt.getText().toString().substring(digits-1);
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            int digits = PasswordEt.getText().toString().length();
            Log.d("LENGTH",""+digits);
            if (!lastChar.equals("-")) {
                if (digits == 3 || digits == 7) {
                    PasswordEt.append("-");
                }
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
}

public void OnLogin(View view) {
    String username = UsernameEt.getText().toString();
    String password = PasswordEt.getText().toString();

    String type = "login";
    BackgroundWorker backgroundWorker = new BackgroundWorker(this);
    backgroundWorker.execute(type, username, password);
}

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}
}

背景工作者

import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;

/**
 * Created by ProgrammingKnowledge on 1/5/2016.
 */
public class BackgroundWorker extends AsyncTask<String,Void,String> {
Context context;
AlertDialog alertDialog;

BackgroundWorker (Context ctx) {
    context = ctx;
}
@Override
protected String doInBackground(String... params) {
    String type = params[0];
    String login_url = "https://treatmentpartnersofamerica.com/amadin/login.php";
    if(type.equals("login")) {
        try {
            String username = params[1];
            String password = params[2];
            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 post_data = URLEncoder.encode("username","UTF-8")+"="+URLEncoder.encode(username,"UTF-8")+"&"
                    +URLEncoder.encode("password","UTF-8")+"="+URLEncoder.encode(password,"UTF-8");
            bufferedWriter.write(post_data);
            bufferedWriter.flush();
            bufferedWriter.close();
            outputStream.close();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
            String result="";
            String line="";
            while((line = bufferedReader.readLine())!= null) {
                result += line;
            }
            bufferedReader.close();
            inputStream.close();
            httpURLConnection.disconnect();
            return result;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return null;
}

@Override
protected void onPreExecute() {
    alertDialog = new AlertDialog.Builder(context).create();
    alertDialog.setTitle("Login Status");
}

@Override
protected void onPostExecute(String result) {
    if(result.contains("Login Success")) // msg you get from success like "Login Success"
    {
        Intent i = new Intent(context,MenuActivity.class);
        context.startActivity(i);
        Toast.makeText(context, result, Toast.LENGTH_SHORT).show();

    }
    else
    {
        Toast.makeText(context, "Certificate ID or Phone Number is incorrect", Toast.LENGTH_LONG).show();
    }
}

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

}

抱歉,如果代码乱七八糟。。。我在编很多东西。。。。

7z5jn7bk

7z5jn7bk1#

我得到了它!我在create上添加了这个。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

UsernameEt = (EditText)findViewById(R.id.etUserName);
PasswordEt = (EditText)findViewById(R.id.etPassword);
rem_userpass = (CheckBox) findViewById(R.id.rem_userpass);

SharedPreferences pref = getSharedPreferences("shared_pref", Context.MODE_PRIVATE);
String name = pref.getString("username", null);
String pass = pref.getString("password", null);
if (name != null && pass != null )
{
    Intent i = new Intent(this, MenuActivity.class);
    startActivity(i);
}

然后我要创建一个注销按钮来清除数据

xsuvu9jc

xsuvu9jc2#

您可以像传递上下文一样在后台类中传递用户名、密码值。这样可以将用户名、密码放在asynctask的onpostexecute()方法的SharedReferences中。

public class BackgroundWorker extends AsyncTask<String,Void,String> {
Context context;
AlertDialog alertDialog;
String usename = null, password = null;

BackgroundWorker (Context ctx, String username, String password) {
    context = ctx;
    this.username = username;
    this.password = password;

}
@Override
protected String doInBackground(String... params) {
    String type = params[0];
    String login_url = "https://treatmentpartnersofamerica.com/amadin/login.php";
    if(type.equals("login")) {
        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 post_data = URLEncoder.encode("username","UTF-8")+"="+URLEncoder.encode(username,"UTF-8")+"&"
                    +URLEncoder.encode("password","UTF-8")+"="+URLEncoder.encode(password,"UTF-8");
            bufferedWriter.write(post_data);
            bufferedWriter.flush();
            bufferedWriter.close();
            outputStream.close();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
            String result="";
            String line="";
            while((line = bufferedReader.readLine())!= null) {
                result += line;
            }
            bufferedReader.close();
            inputStream.close();
            httpURLConnection.disconnect();
            return result;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return null;
}

@Override
protected void onPreExecute() {
    alertDialog = new AlertDialog.Builder(context).create();
    alertDialog.setTitle("Login Status");
}

@Override
protected void onPostExecute(String result) {
    if(result.contains("Login Success")) // msg you get from success like "Login Success"
    {
        Intent i = new Intent(context,MenuActivity.class);
        context.startActivity(i);
        Toast.makeText(context, result, Toast.LENGTH_SHORT).show();
        SharedPreferences.Editor editor = 
        context.getSharedPreferences("shared_pref", MODE_PRIVATE).edit();
        editor.putString("username", username);
        editor.putString("password", password);
        editor.commit();

    }
    else
    {
        Toast.makeText(context, "Certificate ID or Phone Number is incorrect", Toast.LENGTH_LONG).show();
    }
}

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

}

并修改login()方法

public void OnLogin(View view) {
    String username = UsernameEt.getText().toString();
    String password = PasswordEt.getText().toString();

    String type = "login";
    BackgroundWorker backgroundWorker = new BackgroundWorker(this, username, 
    password);
    backgroundWorker.execute(type);
}

相关问题