从无到有实现登录功能以及thinkphp怎么配置数据库信息

好开心,终于解决了。从学习android到现在写登录功能已经不是一次两次了,如今再写想着肯定是信手拈来,没有想到的是尽然折磨了我一天的时间才搞定它。唉。。。。。。

先来看几张截图,这次的登录跟以往的不同加了一点东西在上面。下面看截图吧。

从无到有实现登录功能以及thinkphp怎么配置数据库信息从无到有实现登录功能以及thinkphp怎么配置数据库信息从无到有实现登录功能以及thinkphp怎么配置数据库信息从无到有实现登录功能以及thinkphp怎么配置数据库信息

下面是我对这次问题的一个截图:

下面这个问题是安卓模拟器访问url的时候出现拒绝的错误。我的解决办法是把url中的127.0.0.1换成了本机的IP地址。就不出现错误了。

从无到有实现登录功能以及thinkphp怎么配置数据库信息从无到有实现登录功能以及thinkphp怎么配置数据库信息

下面是我遇到的第二个问题的截图:

出现了乱码,原因是:我编译服务器端的编码不是utf-8。改正为utf-8就可以了。

从无到有实现登录功能以及thinkphp怎么配置数据库信息

接下来是我的服务器的配置代码:

<?php
return array(
// 添加数据库配置信息
'DB_TYPE'=>'mysql',// 数据库类型
'DB_HOST'=>'127.0.0.1',// 服务器地址
'DB_NAME'=>'meeting',// 数据库名
'DB_USER'=>'root',// 用户名
'DB_PWD'=>'123456',// 密码
'DB_PORT'=>3306,// 端口
'DB_PREFIX'=>'m_',// 数据库表前缀
'DB_CHARSET'=>'utf8',// 数据库字符集
'DEFAULT_THEME' =>'',
'LAYOUT_ON'=>true,
'LAYOUT_NAME'=>'layout',
);

下面是我的android端的代码:

先看一下目录:

从无到有实现登录功能以及thinkphp怎么配置数据库信息

SplashActivity.java
package cn.edu.aynu.rjxy.activity;

import java.io.File;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; import org.json.JSONException;
import org.json.JSONObject; import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack; import cn.edu.aynu.rjxy.paths.Paths;
import cn.edu.aynu.rjxy.utils.StreamUtils;
import cn.edu.aynu.rjxy.utils.ToastUtils; import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.widget.TextView;
import android.widget.Toast; /*
* 展示品牌---->初始化数据---->检查版本---->校验合法性
*/
public class SplashActivity extends Activity {
private static final int UPDATE_DIALOG = 1;//更新提醒
private static final int NETWORK_ERROR = 2;//网络异常
private static final int JSON_ERROR = 3;//数据解析失败
private static final int URL_ERROR = 4;//网络异常
private static final int ENTER_HOME = 5;//跳转主页面
//控件初始化
private TextView tvVersion;
private TextView tvProgress;
//服务器的返回值
private String mVersionName;//成员变量
private int mVersionCode;
private String mDescription;
private String mDownloadUrl;
//消息传递
private Handler mHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case UPDATE_DIALOG:
showUpdateDialog();
break;
case NETWORK_ERROR:
ToastUtils.showToast(getApplicationContext(), "网络异常");
enterHome();
break;
case JSON_ERROR:
ToastUtils.showToast(getApplicationContext(), "数据解析失败");
enterHome();
break;
case URL_ERROR:
ToastUtils.showToast(getApplicationContext(), "网络连接异常");
enterHome();
break;
case ENTER_HOME:
enterHome();
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash);
tvVersion = (TextView)findViewById(R.id.tv_version);
tvProgress = (TextView)findViewById(R.id.tv_progress);
tvVersion.setText("版本名:"+getVersionName());
checkVersion();//检查版本
}
/*
* 检查版本更新
*/
private void checkVersion() {
// TODO Auto-generated method stub
new Thread(){
long startTime = System.currentTimeMillis();//开始时间
Message msg = Message.obtain();//获取消息
public void run(){
try {
//
URL url = new URL(Paths.downApkPath);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setConnectTimeout(2000);//连接网络超时
conn.setReadTimeout(2000);//读取超时
conn.setRequestMethod("GET");//访问方法
conn.connect();//连接网络
int responseCode = conn.getResponseCode();
if(responseCode == 200){
String result = StreamUtils.streamToString(conn.getInputStream());
System.out.println("访问成功--->"+result);
//json数据解析
JSONObject jo = new JSONObject(result);
mVersionName = jo.getString("versionName");
mVersionCode = jo.getInt("versionCode");
mDescription = jo.getString("description");
mDownloadUrl = jo.getString("downloadUrl");
System.out.println("versionCode--->"+mVersionCode);
if (getVersionCode()<mVersionCode) {//如果软件的版本与网络中的版本号不一致,提示用户更新版本
System.out.println("有新版本!!!");
msg.what = UPDATE_DIALOG;
}else{
System.out.println("没有新版本!!!");
//跳转到主页面
msg.what = ENTER_HOME;
}
}
} catch (MalformedURLException e) {
//url异常
// TODO Auto-generated catch block
msg.what = URL_ERROR;
e.printStackTrace();
} catch (IOException e) {
//网络异常
// TODO Auto-generated catch block
msg.what = NETWORK_ERROR;
e.printStackTrace();
}catch (JSONException e) {
//json异常
// TODO Auto-generated catch block
e.printStackTrace();
msg.what = JSON_ERROR;
}finally{
long endTime = System.currentTimeMillis();//访问网络结束时间
long timeUsed = endTime - startTime;//访问网络总的用时
if (timeUsed<2000) {//如果访问网络的时间小于2秒,就展示闪屏页面。目的是凑够两秒,来展示软件的品牌。
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} mHandler.sendMessage(msg);//发送消息
}
} }.start(); }
/*
* 用于提醒用户更新的提示窗
*/
protected void showUpdateDialog() {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("发现新版本:"+mVersionName);
builder.setMessage(mDescription);//新版本的描述
builder.setPositiveButton("立即升级", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
System.out.println("发现新版本");
downloadApk();
}
});
builder.setNegativeButton("以后再说", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
enterHome();
}
});
builder.show(); }
/*
* 下载安装包
*/
protected void downloadApk(){
String target = Environment.getExternalStorageDirectory().getAbsolutePath()+"/huiyi.apk";
tvProgress.setVisibility(View.VISIBLE);
HttpUtils utils = new HttpUtils();
utils.download(mDownloadUrl, target, new RequestCallBack<File>() {
//下载成功
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
// TODO Auto-generated method stub
System.out.println("下载成功!!!!");
File result = responseInfo.result;
tvProgress.setVisibility(View.GONE);
enterHome();
}
/*
* 正在下载
* total 文件总大小
* current 当前下载的大小
* isUploading 是否正在上传
* (non-Javadoc)
* @see com.lidroid.xutils.http.callback.RequestCallBack#onLoading(long, long, boolean)
*/ public void onLoading(long total, long current, boolean isUploading) {
// TODO Auto-generated method stub
super.onLoading(total, current, isUploading);
//����ٷֱ�
int percent = (int) ((current*100)/total);
tvProgress.setText("下载进度:"+percent+"%");
}
//下载失败
@Override
public void onFailure(HttpException error, String msg) {
// TODO Auto-generated method stub
System.out.println("下载失败!!!!");
//ToastUtils.showToast(getApplicationContext(),"下载失败!!");
error.printStackTrace(); }
});
}
/*
* 获取版本名
*/
private String getVersionName() {
// TODO Auto-generated method stub
//获取包管理器
PackageManager pm = getPackageManager();
try {
PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0);
int versionCode = packageInfo.versionCode;//获取版本号
String versionName = packageInfo.versionName;//获取版本名
System.out.println("versionName"+versionName+",versionCode"+versionCode);
return versionName;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
/*
* 获取版本号
*/
private int getVersionCode() {
// TODO Auto-generated method stub
//获取包管理器
PackageManager pm = getPackageManager();
try {
PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0);
int versionCode = packageInfo.versionCode;//获取版本号
return versionCode;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
//跳转到主页面
private void enterHome(){
startActivity(new Intent(this,LoginActivity.class));//开启的新的页面
finish();//结束原来的页面
} }
LoginActivity.java
package cn.edu.aynu.rjxy.activity;

import java.lang.ref.WeakReference;
import java.net.SocketException; import org.apache.http.conn.ConnectTimeoutException; import cn.edu.aynu.rjxy.exception.SeriviceRulesException;
import cn.edu.aynu.rjxy.service.UserService;
import cn.edu.aynu.rjxy.service.UserServiceImpl;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
/**
* 根据不同的身份实现登录功能
* @author Administrator
*
*/
public class LoginActivity extends Activity {
private static final int LOGIN_SUCCESS = 1;
private static final String ErrorMsg = "登录失败";
private static final String SUCCESS = "登录成功";
public static final String MSG_LOGIN_FAILED = "登录名或密码出错";
public static final String MSG_SERVER_ERROR = "服务器错误";
public static final String MSG_CONNECT_TIME0UT = "服务连接超时";
public static final String MSG_REQUEST_TIMEOUT = "服务器响应超时";
private static ProgressDialog dialog;
private EditText et_name;
private EditText et_psw;
private Button btn_login;
private Spinner spin_id = null;
private String spinnerId = "员工";
private String[] ids = new String[]{"超级管理员","管理员","员工"};
ArrayAdapter<String> idAdapter = null;
private UserService userService = new UserServiceImpl();
/*
* 初始化控件
*/
private void init(){
et_name = (EditText)findViewById(R.id.et_name);
et_psw = (EditText)findViewById(R.id.et_psw);
btn_login = (Button) findViewById(R.id.btn_login);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
//初始化布局
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//初始化控件
init();
//设置下拉框
setSpinner();
btn_login.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
final String userName = et_name.getText().toString().trim();
final String userPassword = et_psw.getText().toString().trim();
/*
* 输入值验证,判断用户名和密码是否为空
*/ if (TextUtils.isEmpty(userName)||TextUtils.isEmpty(userPassword)) {
Toast.makeText(LoginActivity.this, "账号或者密码不能为空!", 0).show();
}else{
/*
* loading....
*/
if (dialog == null) {
dialog = new ProgressDialog(LoginActivity.this);
}
dialog.setTitle("请等待");
dialog.setMessage("正在登录中...");
dialog.setCancelable(false);
dialog.show();
/*
* 副线程
*/
Thread thread = new Thread(new Runnable() { @Override
public void run() {
try{
userService.userLogin(spinnerId,userName, userPassword);
System.out.println(userName+userPassword);
handler.sendEmptyMessage(LOGIN_SUCCESS);
}catch(SocketException e){
e.printStackTrace();
Message msg = new Message();
Bundle data = new Bundle();
data.putSerializable("ErrorMsg", MSG_REQUEST_TIMEOUT);
msg.setData(data);
handler.sendMessage(msg);
}catch(ConnectTimeoutException e){
e.printStackTrace();
Message msg = new Message();
Bundle data = new Bundle();
data.putSerializable("ErrorMsg", MSG_CONNECT_TIME0UT);
msg.setData(data);
handler.sendMessage(msg);
}catch(SeriviceRulesException e){
e.printStackTrace();
Message msg = new Message();
Bundle data = new Bundle();
data.putSerializable("ErrorMsg", e.getMessage());
msg.setData(data);
handler.sendMessage(msg);
}catch(Exception e){
e.printStackTrace();
Message msg = new Message();
Bundle data = new Bundle();
data.putSerializable("ErrorMsg", ErrorMsg);
msg.setData(data);
handler.sendMessage(msg);
} }
});
thread.start();
} }
});
}
/*
* 设置下拉框
*/
private void setSpinner() {
spin_id = (Spinner) findViewById(R.id.spin_id);
//绑定适配器和值
idAdapter = new ArrayAdapter<String>(LoginActivity.this, android.R.layout.simple_spinner_item,ids);
spin_id.setAdapter(idAdapter);
spin_id.setSelection(2,true);//设置默认选项,此处默认的是第二个选项,即员工
spin_id.setOnItemSelectedListener(new OnItemSelectedListener() { @Override
public void onItemSelected(AdapterView<?> adapter, View view,
int position, long id) {
spinnerId = ids[position];
System.out.println("spinnerId"+spinnerId); } @Override
public void onNothingSelected(AdapterView<?> arg0) { }
});
}
private static class IHandler extends Handler{
private final WeakReference<Activity> mactivity;
public IHandler(LoginActivity activity){
mactivity = new WeakReference<Activity>(activity);
}
@Override
public void handleMessage(Message msg) {
if (dialog != null) {
dialog.dismiss();
}
int flag = msg.what;
switch (flag) {
case 0:
String errorMsg = (String)msg.getData().getSerializable("ErrorMsg");
((LoginActivity)mactivity.get()).showTip(ErrorMsg);
break;
case LOGIN_SUCCESS:
((LoginActivity)mactivity.get()).showTip(SUCCESS);
break;
default:
break;
}
}
}
private IHandler handler = new IHandler(this);
private void showTip(String str) {
Toast.makeText(this, str, 0).show();
}
}
SeriviceRulesException.java
package cn.edu.aynu.rjxy.exception;

public class SeriviceRulesException extends Exception{

    /**
* 异常处理
*/
private static final long serialVersionUID = 7075843798349210359L;
public SeriviceRulesException(String msg) {
super(msg);
}
}
UserService.java
package cn.edu.aynu.rjxy.service;

public interface UserService {
public void userLogin(String spinnerId,String name,String password)throws Exception;
}
UserServiceImpl.java(需要说明的是注释的代码也是可以实现的两种不同的写法)
package cn.edu.aynu.rjxy.service;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List; import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils; import android.util.Log;
import cn.edu.aynu.rjxy.activity.LoginActivity;
import cn.edu.aynu.rjxy.exception.SeriviceRulesException;
import cn.edu.aynu.rjxy.paths.Paths;
import cn.edu.aynu.rjxy.utils.StreamTools; public class UserServiceImpl implements UserService{
private static final String TAG = "UserServiceImpl";
@Override
public void userLogin(String spinnerId,String name, String password) throws Exception {
Log.d(TAG, spinnerId);
Log.d(TAG, name);
Log.d(TAG, password);
Thread.sleep(3000); URL url = new URL(Paths.loginPath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("User-Agent", "Mozilla/5.0(compatible;MSIE 9.0;Windows NT 6.1;Trident/5.0)");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//请求的类型 表单数据
String data = "sno="+name+"&s_password="+password+"&spinnerId="+URLEncoder.encode(spinnerId, "UTF-8");
conn.setRequestProperty("Content-Length", data.length()+"");//数据的长度
conn.setDoOutput(true);//设置向服务器写数据
byte[] bytes = data.getBytes();
conn.getOutputStream().write(bytes);//把数据以流的方式写给服务器
int code = conn.getResponseCode();
System.out.println(code); /*HttpParams params = new BasicHttpParams();
// HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
HttpConnectionParams.setConnectionTimeout(params, 3000);
HttpConnectionParams.setSoTimeout(params, 3000); SchemeRegistry schreg = new SchemeRegistry();
schreg.register(new Scheme("http",PlainSocketFactory.getSocketFactory(),80));
schreg.register(new Scheme("https", PlainSocketFactory.getSocketFactory(), 433));
ClientConnectionManager conman = new ThreadSafeClientConnManager(params, schreg);
HttpClient client = new DefaultHttpClient(conman, params);
String url = "";
HttpPost post = new HttpPost(url);
NameValuePair paramLoginSpinnerId = new BasicNameValuePair("spinnerId", spinnerId);
NameValuePair paramLoginName = new BasicNameValuePair("sno", name);
NameValuePair paramLoginPassword = new BasicNameValuePair("password", password);
List <NameValuePair> param = new ArrayList<NameValuePair>();
param.add(paramLoginSpinnerId);
param.add(paramLoginName);
param.add(paramLoginPassword);
post.setEntity(new UrlEncodedFormEntity(param,HTTP.UTF_8));
HttpResponse response = client.execute(post);
//获取状态码
int code = response.getStatusLine().getStatusCode();*/
System.out.println(code);
if (code != HttpStatus.SC_OK) {
throw new SeriviceRulesException(LoginActivity.MSG_SERVER_ERROR); }
InputStream is = conn.getInputStream();
String result = StreamTools.readStream(is);
System.out.println(result);
//String result = EntityUtils.toString(response.getEntity(),HTTP.UTF_8);
if (result.equals("登录成功")) { }else{
throw new SeriviceRulesException(LoginActivity.MSG_LOGIN_FAILED);
} } }
StreamTools.java
package cn.edu.aynu.rjxy.utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream; public class StreamTools { public static String readStream(InputStream is){
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = is.read(buffer))!=-1) {
baos.write(buffer,0,len);
}
baos.close();
return new String(baos.toByteArray());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
}
} }

有一个文件夹下面存放的是地址:我没有给粘出来。

上一篇:VBA中find的一些使用方法


下一篇:BZOJ3625 [Codeforces Round #250]小朋友和二叉树(生成函数+多项式开根)