自己想的方法,自己实现了,效果挺好,喜欢的可以看看。
实现首次登录后,再次登录时不用进入登录页面,直接进入内容页面,类似于QQ的登录这是自己写的一个模板,我会很详细的介绍一下。
一,首先要有自己数据库和服务器,(本地服务器就可以)关于数据库和服务器我都不再说了,数据库中要有个人信息表用于登录的验证。
下边的是我的服务器端的数据库登录查找代码,返回的数值为该用户的所有信息。
接下来的是我的与android登录servlet,里面有关于json的打包传值,下边是源代码只有post方法
下边的是android的登录与服务器的交互的代码,关于android的登录界面ui我这里就不说了
package com.back.activity;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.impl.client.DefaultHttpClient;
import com.back.bean.Users;
import com.back.runable.LoginRunnable;
import com.back.util.MyApplication;
import com.back.util.PreferencesService;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.content.Intent;
import android.net.ParseException;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class LoginActivity extends Activity {
private EditText name ,password;
private String userphone,userpass,username,address,userimg;
private int userfen,userid;
private PreferencesService preferencesService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
MyApplication.getInstance().addActivity(this);
name=(EditText)findViewById(R.id.name);
password=(EditText)findViewById(R.id.password);
Button denglu=(Button)findViewById(R.id.denglu);
denglu.setOnClickListener(new OnClickListenerIpmdenglu());
}
final Handler handlelogin=new Handler()
{
@Override
public void handleMessage(android.os.Message msg) {
Users user=new Users();
user=(Users)msg.obj;
userid=user.getUserid();
username=user.getUsername();
address=user.getAddress();
userimg=user.getUserimg();
userfen=user.getUserfen();
String dengluflag="true";
Log.i("user-----------------------", username+address+userphone+"存入成功");
preferencesService=new PreferencesService(LoginActivity.this); //将信息存入本地xml种
preferencesService.saveuser(userphone, userpass,userid,username,address,userimg,userfen,dengluflag);
startActivity(new Intent(LoginActivity.this,
MainActivity.class));
Toast.makeText(LoginActivity.this, "登陆成功", 1)
.show();
super.handleMessage(msg);
}
};
public class OnClickListenerIpmdenglu implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
userphone=name.getText().toString();
userpass=password.getText().toString();
new Thread(LoginRunnable.getLoginInfo(handlelogin,userphone,userpass)).start();
}
}
}
下边的是线程里面的代码主要为与服务器的交互
package com.back.runable;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import com.back.bean.Users;
import android.net.ParseException;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
public class LoginRunnable {
public static Runnable getLoginInfo (final Handler myHandler,
final String userphone,final String userpass){
Runnable run=new Runnable() {
@Override
public void run() {
String path ="http://192.168.1.104:8080/back/UserLoginapp";
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(path);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("userphone", userphone));
nvps.add(new BasicNameValuePair("userpass", userpass));
try {
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpResponse httpResponse = null;
try {
httpResponse = httpclient.execute(httpPost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int code = httpResponse.getStatusLine().getStatusCode();// 是否连接成功
if (code == 200) {
Log.i("__________", "连接成功");
// 连接成功
try {
String strResult = EntityUtils.toString(httpResponse
.getEntity());// 接收返回数据
Users user=new Users();
JSONObject js=new JSONObject(strResult);//解析
user.setUserid(js.getInt("userid"));
user.setLabel(js.getInt("label"));
user.setAddress(js.getString("address"));
user.setUserfen(js.getInt("userfen"));
user.setUserimg(js.getString("userimg"));
user.setUsername(js.getString("username"));
Message message=myHandler.obtainMessage();
message.obj=user;
myHandler.sendMessage(message);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
return run;
}
}
下边的将从服务器获取的用户信息存入本地的XML的代码,将用户信息存入本地下次登录时会先从本地提取信息验证是否存在登录状态,如果存在就免登陆直接进入,如果没有就需要再次登录,下边是源码
package com.back.util;
import java.util.HashMap;
import java.util.Map;
import java.util.prefs.Preferences;
import com.back.bean.Users;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.Preference;
public class PreferencesService {
private Context context;
public PreferencesService(Context context)
{
this.context=context;
}
//保存用户参数到user xml文件中
public void saveuser(String userphone,String userpass,int userid,String username,
String address,String userimg,int userfen, String dengluflag)
{
SharedPreferences preferences=context.getSharedPreferences("user", Context.MODE_PRIVATE);
Editor editor=preferences.edit();
editor.putString("userphone", userphone);
editor.putString("userpass", userpass);
editor.putInt("userid", userid);
editor.putInt("userfen", userfen);
editor.putString("username", username);
editor.putString("address", address);
editor.putString("userimg", userimg);
editor.putString("dengluflag", dengluflag);
editor.commit();
}
// 从user中读取用户登录状态数据
public Map<String , String> getdengluflag(){
Map<String , String> params=new HashMap<String, String>();
SharedPreferences preferences=context.getSharedPreferences("user",Context.MODE_PRIVATE);
params.put("dengluflag",preferences.getString("dengluflag",""));
params.put("userphone",preferences.getString("userphone",""));
params.put("username",preferences.getString("username",""));
params.put("address",preferences.getString("address",""));
params.put("userimg",preferences.getString("userimg",""));
params.put("userpass",preferences.getString("userpass",""));
return params;
}
}
接下来的就是在个人信息页面验证和提取用户信息用来判断和填充个人页面了,下边是主要代码
public class Wo extends Activity {
private Button framexiaoxi,framefabu;
private TextView xinxi;
private String dengluflag,userphone,username,userfen;
private PreferencesService preferencesService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wo);
preferencesService=new PreferencesService(this);
Map<String, String> params =preferencesService.getdengluflag();//提取个人信息
dengluflag=params.get("dengluflag");
if(dengluflag.equals("true"))//判断登录状态
{
//params.get("userphone"),为提取详情,可根据需要提取,
Toast.makeText(this,"登录成功!当前用户为"+params.get("userphone"), 1).show();
}
else{
Toast.makeText(this, "您还未登陆请先登录!", 1).show();
startActivity(new Intent(Wo.this,LoginActivity.class));
}
提取完信息后自行填充和布局关于布局方面不做介绍
如需源码联系527515025@qq.com