这是我第一次使用共享首选项登录,但我无法获得它。我也不知道发生了什么。所以这是我的代码。它会转到else { Toast.makeText(MainActivity.this, "Login Failed!", Toast.LENGTH_SHORT).show(); }
package com.example.kun.carkila;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.kosalgeek.genasync12.AsyncResponse;
import com.kosalgeek.genasync12.PostResponseAsyncTask;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
final String LOG = "MainActivity";
Button btnLogin;
EditText etUsername, etPassword;
TextView tvRegister;
SharedPreferences sharedpreferences;
public static final String MyPREFERENCES = "MyPrefs";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
etUsername = (EditText) findViewById(R.id.etFirstname);
etPassword = (EditText) findViewById(R.id.etPassword);
btnLogin = (Button) findViewById(R.id.btnLogin);
tvRegister = (TextView) findViewById(R.id.tvRegister);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
HashMap postData = new HashMap();
String username = etUsername.getText().toString();
String password = etPassword.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("username",username);
editor.putString("password",password);
PostResponseAsyncTask task1 = new PostResponseAsyncTask(MainActivity.this, postData,
new AsyncResponse() {
@Override
public void processFinish(String s) {
if (s.contains("renterowner")) {
Toast.makeText(MainActivity.this, "Renter Login Successful!", Toast.LENGTH_SHORT).show();
Intent in = new Intent(MainActivity.this, ListActivity.class);
startActivity(in);
finish();
} else if (s.contains("ownerrenter")) {
Toast.makeText(MainActivity.this, "Owner Login Successful!", Toast.LENGTH_SHORT).show();
Intent in = new Intent(MainActivity.this, ownerhome.class);
startActivity(in);
finish();
} else {
Toast.makeText(MainActivity.this, "Login Failed!", Toast.LENGTH_SHORT).show();
}
}
});
task1.execute("http://carkila.esy.es/authenticate.php");
}
});
tvRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent in = new Intent(MainActivity.this, RegisterActivity.class);
startActivity(in);
}
});
}
}
这是我的PostResponseAsyncTask,这是我的carkila.esy.es/authenticate.php
<?php
require 'database-config.php';
session_start();
$username = "";
$password = "";
if(isset($_POST['username'])){
$username = $_POST['username'];
}
if (isset($_POST['password'])) {
$password = $_POST['password'];
}
$q = 'SELECT * FROM tbl_user WHERE username=:username AND password=:password';
$query = $dbh->prepare($q);
$query->execute(array(':username' => $username, ':password' => $password));
if($query->rowCount() == 0){
header('Location: index.php?err=1');
}else{
$row = $query->fetch(PDO::FETCH_ASSOC);
session_regenerate_id();
$_SESSION['sess_user_id'] = $row['userID'];
$_SESSION['sess_username'] = $row['username'];
$_SESSION['sess_userrole'] = $row['roles'];
echo $_SESSION['sess_userrole'];
session_write_close();
if( $_SESSION['sess_userrole'] == "renter"){
echo "owner";
}else if ($_SESSION['sess_userrole'] == "owner"){
echo"renter";
}
}
?>
我在OnOptionItemSelected上设置了logout / clean。这是我登录时的列表活动。
package com.example.kun.carkila;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.ContextMenu;
import android.view.KeyEvent;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import com.amigold.fundapter.BindDictionary;
import com.amigold.fundapter.FunDapter;
import com.amigold.fundapter.extractors.StringExtractor;
import com.amigold.fundapter.interfaces.DynamicImageLoader;
import com.kosalgeek.android.json.JsonConverter;
import com.kosalgeek.genasync12.AsyncResponse;
import com.kosalgeek.genasync12.PostResponseAsyncTask;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
public class ListActivity extends AppCompatActivity implements AsyncResponse, AdapterView.OnItemClickListener {
private ArrayList<Cars> carList;
private ListView lvCars;
private FunDapter<Cars> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
ImageLoader.getInstance().init(UILConfig.config(ListActivity.this));
PostResponseAsyncTask taskRead = new PostResponseAsyncTask(ListActivity.this, this);
taskRead.execute("http://carkila.esy.es/product.php");
lvCars = (ListView) findViewById(R.id.lvCars);
registerForContextMenu(lvCars);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == R.id.action_logout) {
SharedPreferences sharedpreferences = getSharedPreferences(MainActivity.MyPREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.clear();
editor.commit();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.list_context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
final Cars selectedCars = adapter.getItem(info.position);
if(item.getItemId() == R.id.menuDelete) {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setMessage("Do you want to remove " + selectedCars.Car_Model+ " ?");
alert.setPositiveButton("Remove", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
carList.remove(selectedCars);
adapter.notifyDataSetChanged();
}
});
alert.setNegativeButton("Cancel", null);
alert.show();
}
return super.onContextItemSelected(item);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if((keyCode == KeyEvent.KEYCODE_BACK)){
finish();
}
return super.onKeyDown(keyCode, event);
}
@Override
public void processFinish (String s){
carList = new JsonConverter<Cars>().toArrayList(s, Cars.class);
BindDictionary<Cars> dict = new BindDictionary<Cars>();
dict.addDynamicImageField(R.id.ivImg, new StringExtractor<Cars>() {
@Override
public String getStringValue(Cars product, int position) {
return product.Image;
}
}, new DynamicImageLoader() {
@Override
public void loadImage(String url, ImageView imageView) {
ImageLoader.getInstance().displayImage(url, imageView); // Default options will be used
}
});
dict.addStringField(R.id.tvCarModel, new StringExtractor<Cars>() {
@Override
public String getStringValue(Cars product, int position) {
return "Car Model: " + product.Car_Model;
}
});
dict.addStringField(R.id.tvCarType, new StringExtractor<Cars>() {
@Override
public String getStringValue(Cars product, int position) {
return "Car Type: " + product.Car_Type;
}
});
dict.addStringField(R.id.tvCapacity, new StringExtractor<Cars>() {
@Override
public String getStringValue(Cars product, int position) {
return "Capacity: " + product.Capacity;
}
});
dict.addStringField(R.id.tvFuelType, new StringExtractor<Cars>() {
@Override
public String getStringValue(Cars product, int position) {
return "Fuel Type: " + product.FuelType;
}
});
dict.addStringField(R.id.tvPlateNumber, new StringExtractor<Cars>() {
@Override
public String getStringValue(Cars product, int position) {
return "Plate Number: " + product.PlateNumber;
}
});
adapter = new FunDapter<>(
ListActivity.this, carList, R.layout.layout_list, dict);
lvCars.setAdapter(adapter);
lvCars.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
Cars selectedCars = carList.get(position);
Intent in = new Intent(ListActivity.this, DetailActivity.class);
in.putExtra("cars", selectedCars);
startActivity(in);
}
}
这是另一个。
package com.example.kun.carkila;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
public class ownerhome extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ownerhome);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent in = new Intent(ownerhome.this, InsertActivity.class);
startActivity(in);
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == R.id.action_logout) {
SharedPreferences sharedpreferences = getSharedPreferences(MainActivity.MyPREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.clear();
editor.commit();
}
return super.onOptionsItemSelected(item);
}
}
先谢谢你们。
希望找到答案,这就是在logcat上打印的内容。
07-22 17:30:50.438 15901-15901/? D/dalvikvm: Late-enabling CheckJNI
07-22 17:30:50.488 15901-15901/com.example.kun.carkila W/dalvikvm: VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;)
07-22 17:30:50.488 15901-15901/com.example.kun.carkila I/dalvikvm: Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.view.WindowCallbackWrapper.onSearchRequested
07-22 17:30:50.488 15901-15901/com.example.kun.carkila W/dalvikvm: VFY: unable to resolve interface method 18011: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z
07-22 17:30:50.488 15901-15901/com.example.kun.carkila D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002
07-22 17:30:50.488 15901-15901/com.example.kun.carkila I/dalvikvm: Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode
07-22 17:30:50.488 15901-15901/com.example.kun.carkila W/dalvikvm: VFY: unable to resolve interface method 18015: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
07-22 17:30:50.488 15901-15901/com.example.kun.carkila D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002
07-22 17:30:50.498 15901-15901/com.example.kun.carkila I/dalvikvm: Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.widget.TintTypedArray.getChangingConfigurations
07-22 17:30:50.498 15901-15901/com.example.kun.carkila W/dalvikvm: VFY: unable to resolve virtual method 444: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
07-22 17:30:50.498 15901-15901/com.example.kun.carkila D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
07-22 17:30:50.498 15901-15901/com.example.kun.carkila I/dalvikvm: Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.widget.TintTypedArray.getType
07-22 17:30:50.498 15901-15901/com.example.kun.carkila W/dalvikvm: VFY: unable to resolve virtual method 466: Landroid/content/res/TypedArray;.getType (I)I
07-22 17:30:50.498 15901-15901/com.example.kun.carkila D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
07-22 17:30:50.498 15901-15901/com.example.kun.carkila I/dalvikvm: Could not find method android.content.res.Resources.getDrawable, referenced from method android.support.v7.widget.ResourcesWrapper.getDrawable
07-22 17:30:50.498 15901-15901/com.example.kun.carkila W/dalvikvm: VFY: unable to resolve virtual method 407: Landroid/content/res/Resources;.getDrawable (ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
07-22 17:30:50.498 15901-15901/com.example.kun.carkila D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
07-22 17:30:50.498 15901-15901/com.example.kun.carkila I/dalvikvm: Could not find method android.content.res.Resources.getDrawableForDensity, referenced from method android.support.v7.widget.ResourcesWrapper.getDrawableForDensity
07-22 17:30:50.498 15901-15901/com.example.kun.carkila W/dalvikvm: VFY: unable to resolve virtual method 409: Landroid/content/res/Resources;.getDrawableForDensity (IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
07-22 17:30:50.498 15901-15901/com.example.kun.carkila D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
07-22 17:30:50.548 15901-15901/com.example.kun.carkila I/PGA: Attempting to create new SOCKET connectionn pid = 15901, tid = 15901
07-22 17:30:50.558 15901-15901/com.example.kun.carkila I/PGA: New SOCKET connection: com.example.kun.carkila (pid 15901, tid 15901)
07-22 17:30:50.558 15901-15901/com.example.kun.carkila W/PGA: [15901] egl: eglCreateWindowSurface (0x557e57a0, 0x0, 0x7816ca98, 0x775bbbe0)
07-22 17:30:50.568 15901-15901/com.example.kun.carkila W/PGA: [15901] egl: eglCreateWindowSurface (0x557e57a0, 0x0, 0x7816ca98, 0x775bbbe0) returned
07-22 17:30:50.568 15901-15901/com.example.kun.carkila D/OpenGLRenderer: Enabling debug mode 0
07-22 17:30:57.238 15901-15901/com.example.kun.carkila D/dalvikvm: GC_FOR_ALLOC freed 361K, 21% free 2976K/3740K, paused 10ms, total 10ms
07-22 17:30:57.238 15901-15901/com.example.kun.carkila I/dalvikvm-heap: Grow heap (frag case) to 3.205MB for 281892-byte allocation
07-22 17:30:57.248 15901-15910/com.example.kun.carkila D/dalvikvm: GC_FOR_ALLOC freed <1K, 20% free 3251K/4016K, paused 10ms, total 10ms
07-22 17:30:57.278 15901-15901/com.example.kun.carkila W/PGA: [15901] egl: eglCreateWindowSurface (0x557e57a0, 0x0, 0x781e17a8, 0x775bbbe0)
07-22 17:30:57.278 15901-15901/com.example.kun.carkila W/PGA: [15901] egl: eglCreateWindowSurface (0x557e57a0, 0x0, 0x781e17a8, 0x775bbbe0) returned
07-22 17:30:58.098 15901-15901/com.example.kun.carkila W/PGA: [15901] egl: eglDestroySurface (0x557e57a0, 0x78198790)
07-22 17:30:58.098 15901-15901/com.example.kun.carkila W/PGA: [15901] egl: eglDestroySurface (0x557e57a0, 0x78198790) returned
答案 0 :(得分:0)
if (s.contains("renterowner"))
不要像这样chcek字符串使用这个
if (s.equalsIgnoreCase("renterowner"))