最近在做Android的课程设计,平时上课也没有怎么听老师讲课,弄了两周时间,终于在前辈的基础上做出了一点东西。谢谢那位在http://51cto.com/分享的源码。这份源码功能基本实现,很适合新手学习使用,整体架构也是用MVC来写的。现在Android已经出到5了。。。这份源码还是支持2.3左右的,有些地方需要重写。
1:google被墙,怎么更新sdk(工欲善其事,必先利其器)。
1:方法一:在国内某些网站上先下载后(可能也是比较旧的版本),再手动安装。推荐一个网站,
http://android-sdk.softonic.cn/感觉还可以。由于当时自己没有使
用,就不做具体的介绍了。,
2:方法二:直接使用Google的源更新。这里是具体的步骤。
http://jingyan.baidu.com/article/b0b63dbfd0948c4a483070ea.html这里再加一点说明。host文件请使
用记事本管理员权限打开,我当时使用的IP地址如下(速度挺快的)。
3:使用vpn(goagent)翻墙。。。嘿嘿,可以当我没有说。个人觉得作为一名程序猿,翻墙这种东西很简单的。
2:实际开发中的问题
主要问题是碰到了:android.os.NetworkOnMainThreadException。课题老师说是因为在Android4.0后,不能再ui主线程里面开启网络连接。要在主线程下面开启一个网络连接的子线程。
实际的解决方案,是在UI主线程下另外开启一个子线程,在子线程里面运行网络连接的程序。实际的工作代码如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.setContentView(R.layout.activity_register);
findViewById(R.id.rigister_btn_register).setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
new Thread(runnable).start();
}
});
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
String val = data.getString("value");
Log.i("mylog","请求结果为-->" + val);
int a=Integer.parseInt(val);
if(a==1){
//注册成功跳转到登陆
Toast.makeText(RegisterActivity.this, "恭喜你,注册成功 !", Toast.LENGTH_SHORT).show();
startActivity(new Intent(RegisterActivity.this,LoginActivity.class));
}
}
};
Runnable runnable = new Runnable(){
public void run() {
//
// TODO: http request.
//
//简单写了下,获取注册信息,账号
EditText accountEt=(EditText) findViewById(R.id.register_account);
Log.v("test", accountEt.toString());
//密码
EditText passwordEt=(EditText) findViewById(R.id.register_password);
Log.v("test", passwordEt.toString());
//获得账号
EditText nickEt=(EditText) findViewById(R.id.register_nick);
//获得性别
RadioGroup group = (RadioGroup)findViewById(R.id.register_radiogroup);
group.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup arg0,int id) {
if(id==R.id.register_radio_nv){
sex="女";
}
}
});
//内容为空
if(accountEt.getText().equals("") || passwordEt.getText().equals("")){
Toast.makeText(RegisterActivity.this, "账号或密码不能为空!", Toast.LENGTH_SHORT).show();
}else {
// 实例化user类,将表单信息填充到user中
User user=new User();
user.setAccount(Integer.parseInt(accountEt.getText().toString()));
user.setPassword(passwordEt.getText().toString());
user.setNick(nickEt.getText().toString());
user.setTrends("该用户暂时没有动态");
user.setSex(sex);
user.setAvatar(4);
user.setLev(0);
user.setAge(0);
//设置时间
user.setTime(MyTime.geTimeNoS());
user.setOperation("register");
int b=0;
try {
Socket s=new Socket();
try{
s.connect(new InetSocketAddress("10.1.12.216",10000),2000);
}catch(SocketTimeoutException e){
//连接服务器超时,错误2
b=2;
}
ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());
oos.writeObject(user);//写入用户信息
Log.i("mylog","请求数据为-->" + user);
ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
Log.i("mylog","返回结果为-->" + ois.read());
YQMessage ms=(YQMessage)ois.readObject();
if(ms.getType().equals(YQMessageType.SUCCESS)){
//连接服务器成功1
b=1;
}else if(ms.getType().equals(YQMessageType.FAIL)){
//连接服务器超时,错误3
b=3;
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Message msg = new Message();
Bundle data = new Bundle();
data.putString("value",String.valueOf(b));
msg.setData(data);
handler.sendMessage(msg);
}
}
};