Android记住以前的登录(后台任务)
Posted
技术标签:
【中文标题】Android记住以前的登录(后台任务)【英文标题】:Android remembering previous login (backgroundtask) 【发布时间】:2017-01-24 18:52:08 【问题描述】:我正在尝试登录以检查用户是否存在于 mysql 数据库中,但在运行应用程序时它会记住以前的登录详细信息。我认为问题出在后台任务中,好像我将其注释掉一样,我可以很好地敬酒登录详细信息。
public class Tab1Activity extends Activity
String task,username,password;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.tab1);
final Button buta = (Button) findViewById(R.id.button1);
final Button butb = (Button) findViewById(R.id.button2);
final TextView usernameTV = (TextView) findViewById(R.id.editText1);
final TextView passwordTV = (TextView) findViewById(R.id.editText2);
buta.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
SharedPreferences preferences = getSharedPreferences("MYPREFS", Context.MODE_PRIVATE);
//editor = preferences.edit();
username=usernameTV.getText().toString();
password=passwordTV.getText().toString();
task="login";
Toast.makeText(getApplicationContext(), username+" "+password, Toast.LENGTH_SHORT).show();
// create and call background activity
BackgroundTask backgroundTaskLogin = new BackgroundTask(Tab1Activity.this);
backgroundTaskLogin.execute(task,username,password);
//get data back from sharedpreference
String driver_exist = preferences.getString("myDatalogin","ERROR getting name");
//display datas
String[] loginSeparated = driver_exist.split(",");
Toast.makeText(getApplicationContext(), loginSeparated[0], Toast.LENGTH_SHORT).show();
if (loginSeparated[0].equals("true"))
int finalId = Integer.parseInt(loginSeparated[1]);
//Toast.makeText(getApplicationContext(), loginSeparated[1], Toast.LENGTH_SHORT).show();
SharedPreferences.Editor editor = getSharedPreferences("MYPREFS", Context.MODE_PRIVATE).edit();
editor.putInt("TaxiDriverId", finalId);
editor.apply();
//once clicked - jump to tab2
TabActivity tabs = (TabActivity) getParent();
tabs.getTabHost().setCurrentTab(1);
else
Toast.makeText(getApplicationContext(), "Wrong password", Toast.LENGTH_SHORT).show();
);
//////////////////////////////////////////////////////
@Override
public boolean onCreateOptionsMenu(Menu menu)
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.tab1, menu);
return true;
@Override
public boolean onOptionsItemSelected(MenuItem item)
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in androidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings)
return true;
return super.onOptionsItemSelected(item);
这是我认为问题所在的背景谈话。
public class BackgroundTask extends AsyncTask<String,Void,String>
SharedPreferences preferences;
SharedPreferences.Editor editor;
SharedPreferences.Editor pig;
Context context;
BackgroundTask(Context ctx)
this.context = ctx;
@Override
protected String doInBackground(String... params)
String urlLogin = "";
preferences = context.getSharedPreferences("MYPREFS", Context.MODE_PRIVATE);
editor = preferences.edit();
editor.putString("flag","0");
editor.commit();
String task = params[0];
String loginusername;
String loginpassword;
if (task.equals("login"))
urlLogin = "http://super.com/LoginAndRegister-login.php";
loginusername = params[1];
loginpassword = params[2];
try
URL url = new URL(urlLogin);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
//send the driver number to the database
OutputStream outputStream = httpURLConnection.getOutputStream();
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream,"UTF-8");
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
String myDatalogin = URLEncoder.encode("identifier_loginEmail","UTF-8")+"="+URLEncoder.encode(loginusername,"UTF-8")
+"&"+URLEncoder.encode("identifier_loginPassword","UTF-8")+"="+URLEncoder.encode(loginpassword,"UTF-8");
bufferedWriter.write(myDatalogin);
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
//get response from the database
InputStream inputStream = httpURLConnection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String dataResponse = "";
String inputLine = "";
while((inputLine = bufferedReader.readLine()) != null)
dataResponse += inputLine;
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
editor.putString("flag","login");
editor.commit();
pig = preferences.edit();
pig.putString("myDatalogin",dataResponse);
pig.commit();
return dataResponse;
catch (MalformedURLException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
//end if statement
【问题讨论】:
【参考方案1】:当您完成Activity
调用finish()
后,这将确保下次启动活动时它会重新开始。还要查看AndroidManifest.xml
中Activity
标记中的launchMode
属性,以确保您正确地开始了您的活动。 https://developer.android.com/guide/topics/manifest/activity-element.html
【讨论】:
感谢您的反馈。该代码有效,但似乎我需要单击两次才能登录,就好像它缓冲了以前的用户名/密码一样。以上是关于Android记住以前的登录(后台任务)的主要内容,如果未能解决你的问题,请参考以下文章
Android 8.0 AlarmManager 后台定时任务