zoukankan      html  css  js  c++  java
  • 从无到有实现登录功能以及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 "";
            }
        }
        
    }

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

  • 相关阅读:
    登录后返回到登录页问题
    vue组件插槽
    js定义类
    arguments.callee用法
    深拷贝的原生js实现
    Hybrid APP架构设计思路
    使用vlfeat 包中遇到的问题
    tensorflow faster rcnn 代码分析一 demo.py
    labelImg 工具
    faster rcnn 做识别
  • 原文地址:https://www.cnblogs.com/kangyaping/p/6078162.html
Copyright © 2011-2022 走看看