安卓无线点餐系统客户端——登陆

1、安卓的Http网络请求有两种,HttpUrlConnection和HttpClient ,这里用了HttpClient连接。听说安卓的HttpUrlConction更好,以后可以尝试。

2、安卓4.0以后不能在主线程中执行网络请求,所以要创建一个新的线程(子线程)

3、在子线程中不能用Toask.makeText(),方法和AlertDialog,会报一个 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 异常。 使用Looper.prepare().  和Looper.loop()可以解决

主要的原因解答:http://284772894.iteye.com/blog/1751865  

http://blog.csdn.net/heng615975867/article/details/9194219


package org.lin.util;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.lin.view.LoginActivity;

import android.os.Handler;
import android.os.Message;

public class HttpUtil {

	public static final String BASE_URL = "http://192.168.56.1:8080/Order_Server/";
	private static HttpResponse resp ;
	private static DefaultHttpClient mClient = new DefaultHttpClient();
	private HttpPost post;
	private HttpGet get;
    
	
	
	//Post方法
	public  String  doPost(MyHttpResquest resquest){
		
		System.out.println("准备发送一个post请求");
		post = new HttpPost(resquest.getUrl());
		
		String result = "";
		
		try {
			post.setEntity(new UrlEncodedFormEntity(resquest.getParams(),"utf-8"));
			System.out.println("执行前");
			resp = mClient.execute(post);
			System.out.println("执行后");
			
			if (resp.getStatusLine().getStatusCode()==200) {
				System.out.println("得到响应");
				result = EntityUtils.toString(resp.getEntity());
				Document doc = Jsoup.parse(result);
				result = doc.body().text();
				
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			
		}finally{
			post.abort();
		}
		
		return result;
	} 
	
	//Get方法
	public  String doGet(MyHttpResquest resquest)
	{
		System.out.println("准备发送一个get请求");
		get = new HttpGet(resquest.getUrl());
		String result = "";
		try {
			System.out.println("执行前");
			resp = mClient.execute(get);
			System.out.println("执行后");
			
			if (resp.getStatusLine().getStatusCode()==200) {
				System.out.println("得到响应");
				result = EntityUtils.toString(resp.getEntity(),"utf-8");
				Document doc = Jsoup.parse(result);
				result = doc.body().text();
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			
		}finally{
			get.abort();
		}
		
		return result;
		
	}
	
}


package com.lin.view;

import org.jsoup.nodes.Document;
import org.lin.util.HttpUtil;
import org.lin.util.MyHttpResquest;
import org.lin.util.NetConstant;

import com.example.order_client.R;
import com.lin.helper.CircularImage;


import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.R.string;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.BitmapFactory;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.text.Editable;
import android.text.Layout;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

public class LoginActivity extends Activity implements OnFocusChangeListener,OnClickListener,TextWatcher
{

	private static ImageView head_icon,login_user,login_account_edit_clear,login_key,login_key_edit_clear;
	private static EditText login_edit_account,login_edit_key;
	private static Button login_btn;
	private static TextView login_regist,login_forget;
	private static ScrollView scrollView;
	private static LinearLayout layout;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_login);
		init();
		//getWindow().setFeatureInt(featureId, value) 自定义标题
		
	}

	private void init()
	{
		layout = (LinearLayout)findViewById(R.id.login_layout);
		layout.setOnClickListener(this);
		//head_icon = (ImageView)findViewById(R.id.login_icon);
		CircularImage cover_head_icon = (CircularImage)findViewById(R.id.cover_head_icon);
		cover_head_icon.setImageResource(R.drawable.default_head_icon);
		login_user = (ImageView)findViewById(R.id.login_user);
		login_account_edit_clear = (ImageView)findViewById(R.id.login_account_edit_clear);
		login_account_edit_clear.setOnClickListener(this);
		login_key = (ImageView)findViewById(R.id.login_key);
		login_key_edit_clear = (ImageView)findViewById(R.id.login_key_edit_clear);
		login_key_edit_clear.setOnClickListener(this);
		login_edit_account =(EditText)findViewById(R.id.login_edit_account);
		login_edit_account.addTextChangedListener(this);
		login_edit_account.setOnFocusChangeListener(this);
		login_edit_key = (EditText)findViewById(R.id.login_edit_key);
		login_edit_key.addTextChangedListener(this);
		login_edit_key.setOnFocusChangeListener(this);
		login_btn = (Button)findViewById(R.id.login_btn);
		login_btn.setOnClickListener(this);
		login_regist = (TextView)findViewById(R.id.login_regist);
		login_regist.setOnClickListener(this);
		login_forget = (TextView)findViewById(R.id.login_forget);
		login_forget.setOnClickListener(this);
		scrollView = (ScrollView)findViewById(R.id.login_scroller);
		
	}
	
	

	


	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId())
		{
			case R.id.login_btn:
				//登陆按钮
				login();
				break;
			case R.id.login_account_edit_clear:
				login_edit_account.setText("");
				break;
			case R.id.login_key_edit_clear:
				login_edit_key.setText("");
				break;
			case R.id.login_regist:
				Toast.makeText(this, "用户注册", Toast.LENGTH_SHORT).show();
				startActivity(new Intent().setClass(LoginActivity.this, RegistActivity.class));
				break;
			case R.id.login_forget:
				Toast.makeText(this, "忘记密码", Toast.LENGTH_SHORT).show();
				break;
			case R.id.login_layout:
				//点击空白处隐藏虚拟键盘
				((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE))
				.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
						InputMethodManager.HIDE_NOT_ALWAYS);
				
			default:
				break;
		}
		
	}

	@Override
	public void onFocusChange(View v, boolean hasFocus) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.login_edit_account:
			if (hasFocus) {
				login_account_edit_clear.setVisibility(View.VISIBLE);
			}else {
				login_account_edit_clear.setVisibility(View.GONE);
			}
			break;
		case R.id.login_edit_key:
			if (hasFocus) {
				login_key_edit_clear.setVisibility(View.VISIBLE);
			}else {
				login_key_edit_clear.setVisibility(View.GONE);
			}
		default:
			break;
		}
		
		
	}

	@Override
	public void afterTextChanged(Editable s) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void beforeTextChanged(CharSequence s, int start, int count,
			int after) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onTextChanged(CharSequence s, int start, int before, int count) {
		// TODO Auto-generated method stub
		
		if (s!=null) {
			if (s.equals(login_edit_account.getText())) {
				
				login_user.setBackgroundResource(R.drawable.login_user_hightlighted);
			}
			if (s.equals(login_edit_key.getText())) {
				login_key.setBackgroundResource(R.drawable.login_key_hightlighted);
			}
			if (s.length()==0) {
				
				if (login_edit_account.getText().length()==0) {
					login_user.setBackgroundResource(R.drawable.login_user);
				}
				if(login_edit_key.getText().length()==0){
					login_key.setBackgroundResource(R.drawable.login_key);
				}
				
				
			}
		}
		
	}

	//登陆方法
	public void login()
	{ 
		
		new Thread(){
			public void run()
			{
				String username = login_edit_account.getText().toString();
				String password = login_edit_key.getText().toString();
				String checkStr = "action=login&username="+username+"&password="+password;
				String url = HttpUtil.BASE_URL+"AccountServlet?"+checkStr;
				System.out.println("url="+url);
				MyHttpResquest myHttpResquest = new MyHttpResquest(NetConstant.TYPE_GET, url, null,true);
				String result = new HttpUtil().doGet(myHttpResquest);
				if (result.equals("success")) {
					System.out.println("登陆成功");
					//startActivity(new Intent(LoginActivity.this,RegistActivity.class));
				}else {
					Looper.prepare();
					//ShowDialog("账号或密码错误");
					Toast.makeText(LoginActivity.this, "账号或密码错误", Toast.LENGTH_SHORT).show();
					Looper.loop();
					System.out.println("登陆失败");
				}
			}
		}.start();
	}
	
	public void saveUserMSG(String result)
	{
		//保存登陆信息
	}
	
	public void ShowDialog(String msg)
	{
		Builder builder = new Builder(this);
		builder.setMessage(msg).setCancelable(false).setPositiveButton("确定", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				
			}
		});
		
		AlertDialog alertDialog = builder.create();
		alertDialog.show();
	}
	
}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值