/IM/src/com/example/imui/RegesterActivity.java
package com.example.imui;
import org.jivesoftware.smack.PacketCollector;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.filter.AndFilter;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.filter.PacketIDFilter;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Registration;
import com.example.service.XxmpConnection;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class RegesterActivity extends Activity implements OnClickListener {
private EditText account;
private EditText password;
private EditText nickname;
private Button regester;
private XMPPConnection connection;
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0:
Toast.makeText(RegesterActivity.this, "连接服务器失败", 0).show();
break;
case 1:
Toast.makeText(RegesterActivity.this, "注册成功", 0).show();
break;
case 2:
Toast.makeText(RegesterActivity.this, "已有账号", 0).show();
break;
case 3:
Toast.makeText(RegesterActivity.this, "注册失败", 0).show();
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.regester);
account = (EditText) findViewById(R.id.reg_acount);
password = (EditText) findViewById(R.id.reg_password);
nickname = (EditText) findViewById(R.id.reg_nickname);
regester = (Button) findViewById(R.id.bt_regester);
regester.setOnClickListener(this);
}
@Override
public void onClick(View v) {
final String accountStr = account.getText().toString().trim();
final String passwordStr = password.getText().toString().trim();
new Thread(new Runnable() {
@Override
public void run() {
connection = XxmpConnection.getConnection();
regester(accountStr, passwordStr);
}
}).start();
}
private void regester(String accountStr, String passwordStr) {
if (connection == null) {
handler.sendEmptyMessage(0);
}
Registration registration = new Registration();
registration.setType(IQ.Type.SET);
registration.setTo(connection.getServiceName());
Log.d("kkk", connection.getServiceName());
registration.setUsername(accountStr);
registration.setPassword(passwordStr);
registration.addAttribute("android", "geolo_createUser_android");
PacketFilter filter = new AndFilter(new PacketIDFilter(
registration.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = connection.createPacketCollector(filter);
connection.sendPacket(registration);
IQ resultIQ = (IQ) collector.nextResult(SmackConfiguration
.getPacketReplyTimeout());
collector.cancel();// 停止请求results(是否成功的结果)
if (resultIQ == null) {
Log.e("RegistActivity", "No response from server.");
handler.sendEmptyMessage(0);
} else if (resultIQ.getType() == IQ.Type.RESULT) {
handler.sendEmptyMessage(1);
finish();
} else {
if (resultIQ.getError().toString()
.equalsIgnoreCase("conflict(409)")) {
Log.e("RegistActivity", "IQ.Type.ERROR: "
+ resultIQ.getError().toString());
handler.sendEmptyMessage(2);
} else {
Log.e("RegistActivity", "IQ.Type.ERROR: "
+ resultIQ.getError().toString());
handler.sendEmptyMessage(3);
}
}
}
}
/IM/res/layout/regester.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:orientation="vertical"
android:layout_gravity="center_horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户注册"
android:layout_marginTop="20dp"
android:textSize="@dimen/textsize11"
android:layout_gravity="center_horizontal"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/acount"
android:textSize="@dimen/textsize11" />
<EditText
android:id="@+id/reg_acount"
android:layout_width="@dimen/wigth"
android:layout_height="wrap_content"
android:background="@drawable/bg_text"
android:hint="@string/hint1"
android:inputType="number"
android:padding="2dp"
android:textSize="@dimen/textsize9" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/password"
android:textSize="@dimen/textsize11" />
<EditText
android:id="@+id/reg_password"
android:layout_width="@dimen/wigth"
android:layout_height="wrap_content"
android:background="@drawable/bg_text"
android:hint="@string/hint2"
android:inputType="textPassword"
android:padding="2dp"
android:textSize="@dimen/textsize9" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="昵称 : "
android:textSize="@dimen/textsize11" />
<EditText
android:id="@+id/reg_nickname"
android:layout_width="@dimen/wigth"
android:layout_height="wrap_content"
android:background="@drawable/bg_text"
android:padding="2dp"
android:textSize="@dimen/textsize9" />
</LinearLayout>
<Button
android:layout_width="@dimen/wigth"
android:layout_height="wrap_content"
android:id="@+id/bt_regester"
android:layout_marginTop="20dp"
android:background="@drawable/button_circle"
android:text="注册"
android:layout_gravity="center_horizontal"
android:textSize="@dimen/textsize9"/>
</LinearLayout>