您的位置:首页 > 理论基础 > 计算机网络

Android中的注册信息页面涉及到链接网络

2014-10-21 00:00 253 查看
摘要: 本部分是Android客户端的注册信息界面,用户把需要注册的信息填写之后提交给服务器,服务器在返回是否注册成功,本模块涉及到对网络环境的判断(当前网络是否可用),还有线程之间的通信问题,以表单形式提交用户数据,配置ip地址(用到了配置文件sharedpreferences),

一个Android应用总是离不开xml布局文件和逻辑代码部分

1.把布局文件命名为regis.xml(当然读者也可以定义为别的名字)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/back_ground"
android:orientation="vertical" >

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center_vertical" >

<ImageView
android:id="@+id/btn_back"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignParentLeft="true"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:onClick="back_before"
android:src="@drawable/back_before" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="注册"
android:textColor="#FFFFFF"
android:textSize="25sp" />
</RelativeLayout>

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="50dp"
android:padding="10dp" >

<TextView
android:id="@+id/text5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="教师工号: "
android:textSize="20sp" />

<EditText
android:id="@+id/et5"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignBottom="@+id/text5"
android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/text5"
android:background="@drawable/person_bg"
android:hint="请输入您的工号"
android:inputType="number"
android:singleLine="true"
android:textSize="19sp" >
</EditText>
</RelativeLayout>

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:padding="10dp" >

<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="用 户 名: "
android:textSize="20sp" />

<EditText
android:id="@+id/et1"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/text1"
android:background="@drawable/person_bg"
android:hint="请填写您的用户名"
android:lineSpacingExtra="0dp"
android:singleLine="true"
android:textSize="19sp" />
</RelativeLayout>

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:padding="10dp" >

<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="密 码: "
android:textSize="20sp" />

<EditText
android:id="@+id/et2"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/text2"
android:background="@drawable/person_bg"
android:hint="请输入6~12位数字或字母"
android:singleLine="true"
android:textSize="19sp" />
</RelativeLayout>

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:padding="10dp" >

<TextView
android:id="@+id/text3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="确认密码: "
android:textSize="20sp" />

<EditText
android:id="@+id/et3"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/text3"
android:background="@drawable/person_bg"
android:hint="请输入6~12位数字或字母"
android:singleLine="true"
android:textSize="19sp" />
</RelativeLayout>

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:padding="10dp" >

<TextView
android:id="@+id/text4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="手 机 号: "
android:textSize="20sp" />

<EditText
android:id="@+id/et4"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/text4"
android:background="@drawable/person_bg"
android:hint="请输入您的手机号"
android:inputType="numberPassword|textPassword"
android:singleLine="true"
android:textSize="19sp" />
</RelativeLayout>

<Button
android:id="@+id/ok"
android:layout_width="200dp"
android:layout_height="48dp"
android:layout_gravity="center"
android:layout_marginTop="40dp"
android:background="@drawable/button_bg"
android:onClick="topost"
android:text="注 册"
android:textSize="24sp" />

</LinearLayout>

2.逻辑代码部分(此部分读者可能会发现有些代码没用,加上去了反而有错误提示,那就删去吧,因为这部分代码是项目中用到的,和别的Activity可能有关联)

package org.xml;

import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
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.params.ConnManagerParams;
import org.apache.http.impl.client.DefaultHttpClient;
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.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import xeh.testone.AllActivity;
import xeh.testone.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.media.SoundPool;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class RegisActivity extends Activity {
private EditText et1, et2, et3, et4, et5;
private Button ok;
SoundPool sPool;
int apple;

//注册时得到的响应值,线程之间的通信得到的来自服务器端的返回值
@SuppressLint("HandlerLeak")
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
Toast.makeText(RegisActivity.this, "注册成功!", Toast.LENGTH_SHORT)
.show();
Intent i = new Intent(RegisActivity.this, LoginActivity.class);
startActivity(i);
RegisActivity.this.finish();
} else if (msg.what == -1) {
Toast.makeText(RegisActivity.this, "注册失败!", Toast.LENGTH_SHORT)
.show();
} else if (msg.what == 2) {
Toast.makeText(RegisActivity.this, "此Id已被占用!",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(RegisActivity.this, "系统错误,请联系管理员!",
Toast.LENGTH_SHORT).show();
}
};
};

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.regis);
AllActivity.getInstance().addActivity(this);
okButton();

//下面两行代码是定义了一个按钮音效,当点击按钮的时候会发出声音,

sPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
apple = sPool.load(this, R.raw.apple, 1);//apple是存放的音乐文件.mp3读者可以在res文件夹下面建立一个raw文件下把要//播//放的音效放进去就可以了
}

//下面的方法和上面的代码是一起使用的 这部分读者可以删去

public void playSound() {
sPool.play(apple, 1, 1, 1, 0, 1.0f);
}

private void okButton() {
et1 = (EditText) findViewById(R.id.et1);
et2 = (EditText) findViewById(R.id.et2);
et3 = (EditText) findViewById(R.id.et3);
et4 = (EditText) findViewById(R.id.et4);
et5 = (EditText) findViewById(R.id.et5);

//从配置文件中得到注册时候请求的服务器端地址

SharedPreferences sharesp = getSharedPreferences("URL", Context.MODE_PRIVATE);
final String url = sharesp.getString("Regis", "");
ok = (Button) findViewById(R.id.ok);
ok.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

playSound();
final String id = et5.getText().toString().trim();
final String name = et1.getText().toString().trim();
final String pass = et2.getText().toString().trim();
final String pass2 = et3.getText().toString().trim();
final String phone = et4.getText().toString().trim();

//下面是对用户输入的信息进行判断

if ("".equals(id)) {
Toast.makeText(getBaseContext(), "工号不能为空",
Toast.LENGTH_SHORT).show();
return;
}
if ("".equals(name)) {
Toast.makeText(getBaseContext(), "用户名不能为空",
Toast.LENGTH_SHORT).show();
return;
}
if ("".equals(pass) || "".equals(pass2)
|| (pass.length() < 6 || pass.length() > 12)
|| (pass2.length() < 6 || pass2.length() > 12)) {
Toast.makeText(getBaseContext(), "密码不能为空或输入有误",
Toast.LENGTH_SHORT).show();
return;
}
if ("".equals(phone) || (phone.length() != 11)) {
Toast.makeText(getBaseContext(), "手机号不能为空或不合法",
Toast.LENGTH_SHORT).show();
return;
}
if (isNetConnected()) {
// return;
} else {
Toast.makeText(getBaseContext(), "亲!没有网络哦!",
Toast.LENGTH_LONG).show();
setNetwork();
}
if (pass.equals(pass2) && !"".equals(name) && !"".equals(id)
&& !"".equals(phone) && phone.length() == 11
&& (pass.length() >= 6 && pass.length() <= 12)
&& (pass2.length() >= 6 && pass2.length() <= 12)) {

//穿件一个匿名线程提交用户的数据
new Thread() {
public void run() {
try {
HttpPost post = new HttpPost(url);//以post方法提交
HttpClient client = new DefaultHttpClient();
// 设置超时
HttpParams params = new BasicHttpParams();
// 从连接池中获取连接的超时时间
ConnManagerParams.setTimeout(params, 10000);
// 通过网络与服务器建立连接的超时时间
HttpConnectionParams.setConnectionTimeout(
params, 10000);
// 读取响应数据的超时时间
HttpConnectionParams
.setSoTimeout(params, 10000);
// 设置请求参数
post.setParams(params);
// 传递请求参数
List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
list.add(new BasicNameValuePair("user_id", id));
list.add(new BasicNameValuePair("user_name",
name));
list.add(new BasicNameValuePair("user_code",
pass));
list.add(new BasicNameValuePair("telPhone",
phone));
UrlEncodedFormEntity encodedFormEntity = new UrlEncodedFormEntity(
list, HTTP.UTF_8);
post.setEntity(encodedFormEntity);
HttpResponse response = client.execute(post);
String temp = null;
if (response.getStatusLine().getStatusCode() == 200) {
temp = EntityUtils.toString(
response.getEntity(), HTTP.UTF_8);
System.out.println("----regis temp----> "
+ temp);
Message message = new Message();
message.what = Integer.parseInt(temp); // 1代表注册成功// -1代表注册失败// 2此Id已被占用
mHandler.sendMessage(message);
} else {
Toast.makeText(RegisActivity.this,
"服务异常!!",
Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
} else {
Toast.makeText(RegisActivity.this, "输入的两次密码不一致或无效!",
Toast.LENGTH_LONG).show();
return;
}
}

});
}

// 检测网络是否连接
private boolean isNetConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
NetworkInfo[] infos = cm.getAllNetworkInfo();
if (infos != null) {
for (NetworkInfo ni : infos) {
if (ni.isConnected() && ni.isAvailable()) {
return true;
}
}
}
}
return false;
}

//网络未连接时,调用设置方法
private void setNetwork() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("网络提示信息");
builder.setMessage("网络不可用,如果继续,请先设置网络!");
builder.setCancelable(false);
builder.setPositiveButton("设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = null;
/**
* 判断手机系统的版本!如果API大于10 就是3.0+ 因为3.0以上的版本的设置和3.0以下的设置不一样,调用的方法不同
*/
if (android.os.Build.VERSION.SDK_INT > 10) {
// intent = new
// Intent(android.provider.Settings.ACTION_WIFI_SETTINGS);
intent = new Intent(
android.provider.Settings.ACTION_SETTINGS);
} else {
intent = new Intent();
ComponentName component = new ComponentName(
"com.android.settings",
"com.android.settings.WirelessSettings");
intent.setComponent(component);
intent.setAction("android.intent.action.VIEW");
}
startActivity(intent);
}
});

builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
RegisActivity.this.finish();
}
});
builder.create();
builder.show();
}

//这个是页面左上角的图片按钮

public void back_before(View v) {
Intent i = new Intent(RegisActivity.this, LoginActivity.class);
startActivity(i);
RegisActivity.this.finish();
}

public boolean onKeyDown(int keyCode, KeyEvent event) {// 捕捉返回键
if (keyCode == KeyEvent.KEYCODE_BACK) {
// 按了返回键,返回到登陆界面
Intent i = new Intent(RegisActivity.this, LoginActivity.class);
startActivity(i);
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}

3.本模块用到了几个权限,还要在AndroidManifest.xml中注册新的Activity否侧会出错的,权限如下,请读者自行加到AndroidManifest.xml中

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

说明:此部分代码可能复制过去无法运行,还请读者调试一下,本代码不是最优的代码,也可能有错,欢迎读者指出其中的错误,感激不尽!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐