我的共享首选项登录无法正常工作

时间:2016-07-22 09:09:05

标签: android login sharedpreferences

这是我第一次使用共享首选项登录,但我无法获得它。我也不知道发生了什么。所以这是我的代码。它会转到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

authenicate.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。这是我登录时的列表活动。

ListActivity

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);

}
}

这是另一个。

ownerhome

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上打印的内容。

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

1 个答案:

答案 0 :(得分:0)

if (s.contains("renterowner")) 

不要像这样chcek字符串使用这个

if (s.equalsIgnoreCase("renterowner"))