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

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

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

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

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

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

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

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

<?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端的代码:

先看一下目录:

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 "";
        }
    }
    
}

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

原文地址:https://www.cnblogs.com/kangyaping/p/6078162.html