附录以及部分源代码
来源:互联网 发布:波士顿矩阵图,何种业务 编辑:程序博客网 时间:2024/05/21 15:54
主界面代码及抽屉界面代码:
package com.gemptc.fashionrecipe.zhuye.main;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnPreDrawListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.SimpleAdapter;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import com.gemptc.fashionrecipe.R;
import com.gemptc.fashionrecipe.dao.CacheDataHelper;
import com.gemptc.fashionrecipe.daohang.CollectFragment;
import com.gemptc.fashionrecipe.daohang.UploadFragment;
import com.gemptc.fashionrecipe.daohang.UserFragment;
import com.gemptc.fashionrecipe.more.CaptureActivity;
import com.gemptc.fashionrecipe.more.MoreAbout;
import com.gemptc.fashionrecipe.more.MoreCheckUpdate;
import com.gemptc.fashionrecipe.more.MoreSet;
import com.gemptc.fashionrecipe.more.MoreUploadPhoto;
import com.gemptc.fashionrecipe.more.MoreYiJianFanKui;
import com.gemptc.fashionrecipe.zhuye.layout.MyLinearLayout;
import com.gemptc.fashionrecipe.zhuye.layout.MyLinearLayout.OnScrollListener;
public class MainActivity extends FragmentActivity implements OnTouchListener,
GestureDetector.OnGestureListener, OnItemClickListener,
android.widget.RadioGroup.OnCheckedChangeListener {
// 由于Activity中抢占了OnTouch事件,那么设置触摸事件可以在主activity中设置一个接口如下(自定义接口)
private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MyOnTouchListener>(
10);
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (MyOnTouchListener listener : onTouchListeners) {
listener.onTouch(ev);
}
return super.dispatchTouchEvent(ev);
}
public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.add(myOnTouchListener);
}
public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.remove(myOnTouchListener);
}
public interface MyOnTouchListener {
public boolean onTouch(MotionEvent ev);
}
private RadioGroup group;
private TabHost tabHost;
private String navigation_bar_home = "home";
private String navigation_bar_user = "user";
private String navigation_bar_search = "search";
private String navigation_bar_upload = "upload";
private String navigation_bar_collect = "collect";
private boolean hasMeasured = false;// 是否Measured.
private LinearLayout layout_left;// 左边布局
private LinearLayout layout_right;// 右边布局
private ImageButton iv_set;// 图片
private ListView lv_set;// 设置菜单
/** 每次自动展开/收缩的范围 */
private int MAX_WIDTH = 0;
/** 每次自动展开/收缩的速度 */
private final static int SPEED = 30;
private final static int sleep_time = 5;
private GestureDetector mGestureDetector;// 手势
private boolean isScrolling = false;
private float mScrollX; // 滑块滑动距离
private int window_width;// 屏幕的宽度
// private String TAG = "jj";
private View view = null;// 点击的view
private String title[] = { "系统设置", "扫一扫", "意见反馈", "帮助中心", "检查更新", "我的资料",
"关于" };
private MyLinearLayout mylaout;
private boolean mKeepListenFlag;
@SuppressWarnings("static-access")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// sd card 可用
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// 创建数据库
new CacheDataHelper(this).openDatabase().close();
} else {
// sd card当前不可用
new AlertDialog.Builder(this)
.setTitle("确认")
.setMessage("本程序需SD卡,请确认SD卡是否正常")
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialoginterface, int i) {
// 按钮事件
finish();
}
}).show();
return;
}
setContentView(R.layout.main);
init();
setNavigationBar();
}
private void init() {
group = (RadioGroup) findViewById(R.id.bottom_group);
tabHost = (TabHost) findViewById(android.R.id.tabhost);
group.setOnCheckedChangeListener(this);
// findViewById(R.id.home_more_btn).setOnClickListener(this);
tabHost.setup();
LayoutInflater.from(MainActivity.this).inflate(R.layout.home, null,
true);
layout_left = (LinearLayout) findViewById(R.id.layout_left);
layout_right = (LinearLayout) findViewById(R.id.layout_right);
iv_set = (ImageButton) findViewById(R.id.home_more_btn);
lv_set = (ListView) findViewById(R.id.lv_set);
mylaout = (MyLinearLayout) findViewById(R.id.mylaout);
// lv_set.setAdapter(new ArrayAdapter<String>(this, R.layout.item,
// R.id.tv_item, title));
/***
* 实现该接口
*/
ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> map0 = new HashMap<String, Object>();
map0.put("icon", R.drawable.icon_shezhi);
map0.put("affair", "系统设置");
listItem.add(map0);
HashMap<String, Object> map1 = new HashMap<String, Object>();
map1.put("icon", R.drawable.icon_saoyisao);
map1.put("affair", "扫一扫");
listItem.add(map1);
HashMap<String, Object> map2 = new HashMap<String, Object>();
map2.put("icon", R.drawable.icon_yijianfankui);
map2.put("affair", "意见反馈");
listItem.add(map2);
HashMap<String, Object> map3 = new HashMap<String, Object>();
map3.put("icon", R.drawable.icon_bangzhu);
map3.put("affair", "帮助中心");
listItem.add(map3);
HashMap<String, Object> map4 = new HashMap<String, Object>();
map4.put("icon", R.drawable.icon_shuaxin);
map4.put("affair", "检查更新");
listItem.add(map4);
HashMap<String, Object> map5 = new HashMap<String, Object>();
map5.put("icon", R.drawable.icon_guanyu);
map5.put("affair", "上传菜谱");
listItem.add(map5);
HashMap<String, Object> map6 = new HashMap<String, Object>();
map6.put("icon", R.drawable.icon_guanyu);
map6.put("affair", "关于");
listItem.add(map6);
SimpleAdapter listItemAdapter = new SimpleAdapter(MainActivity.this,
listItem, R.layout.item, new String[] { "icon", "affair" },
new int[] { R.id.ItemImage, R.id.tv_item });
SimpleAdapter listItemAdapter1 = new SimpleAdapter(MainActivity.this,
listItem, R.layout.item, new String[] { "icon", "affair" },
new int[] { R.id.ItemImage, R.id.tv_item });
lv_set.setAdapter(listItemAdapter1);
mylaout.setOnScrollListener(new OnScrollListener() {
@Override
public void doScroll(float distanceX) {
doScrolling(distanceX);
}
@Override
public void doLoosen() {
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) layout_left
.getLayoutParams();
// Log.e("jj", "layoutParams.leftMargin="
// + layoutParams.leftMargin);
// 缩回去
if (layoutParams.leftMargin < -window_width / 2) {
new AsynMove().execute(-SPEED);
} else {
new AsynMove().execute(SPEED);
}
}
});
// 点击监听
lv_set.setOnItemClickListener(this);
lv_set.setCacheColorHint(0);
layout_right.setOnTouchListener(this);
// layout_left.setOnTouchListener(this);
iv_set.setOnTouchListener(this);
mGestureDetector = new GestureDetector(this);
// 禁用长按监听
mGestureDetector.setIsLongpressEnabled(false);
getMAX_WIDTH();
}
private void setNavigationBar() {
TabSpec tab_home = tabHost.newTabSpec(navigation_bar_home);
TabSpec tab_user = tabHost.newTabSpec(navigation_bar_user);
TabSpec tab_search = tabHost.newTabSpec(navigation_bar_search);
TabSpec tab_menu = tabHost.newTabSpec(navigation_bar_upload);
TabSpec tab_share = tabHost.newTabSpec(navigation_bar_collect);
tab_home.setIndicator(navigation_bar_home).setContent(
R.id.fragment_home);
tab_user.setIndicator(navigation_bar_home).setContent(
R.id.fragment_user);
tab_search.setIndicator(navigation_bar_home).setContent(
R.id.fragment_search);
tab_menu.setIndicator(navigation_bar_home).setContent(
R.id.fragment_upload);
tab_share.setIndicator(navigation_bar_home).setContent(
R.id.fragment_collect);
tabHost.addTab(tab_home);
tabHost.addTab(tab_search);
tabHost.addTab(tab_menu);
tabHost.addTab(tab_user);
tabHost.addTab(tab_share);
}
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.radio_home:
tabHost.setCurrentTabByTag(navigation_bar_home);
break;
case R.id.radio_user:
tabHost.setCurrentTabByTag(navigation_bar_user);
Fragment currentFragment = getSupportFragmentManager()
.findFragmentById(R.id.fragment_upload);
if (currentFragment instanceof UserFragment) {
((UserFragment) currentFragment).hideLogin();
}
break;
case R.id.radio_search:
tabHost.setCurrentTabByTag(navigation_bar_search);
break;
case R.id.radio_upload:
tabHost.setCurrentTabByTag(navigation_bar_upload);
break;
case R.id.radio_collect:
// Intent intent=new
// Intent(MainActivity.this,ShoucangActivity.class);
// startActivity(intent);
Fragment currentFragment1 = getSupportFragmentManager()
.findFragmentById(R.id.fragment_collect);
if (currentFragment1 instanceof CollectFragment) {
((CollectFragment) currentFragment1).refreshMyFavor();
}
tabHost.setCurrentTabByTag(navigation_bar_collect);
break;
}
if (checkedId == R.id.radio_upload) {
Fragment currentFragment = getSupportFragmentManager()
.findFragmentById(R.id.fragment_upload);
if (currentFragment instanceof UploadFragment) {
((UploadFragment) currentFragment).start();
}
}
}
private void dialog() {
// TODO Auto-generated method stub
Builder dialog = new Builder(MainActivity.this);
dialog.setMessage("确定要退出吗?");
dialog.setTitle("退出");
dialog.setPositiveButton("确定",
new android.content.DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
MainActivity.this.finish();
overridePendingTransition(R.anim.push_right_in,
R.anim.push_right_out);
}
});
dialog.setNegativeButton("取消",
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialog.create().show();
}
void doScrolling(float distanceX) {
isScrolling = true;
mScrollX += distanceX;// distanceX:向左为正,右为负
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) layout_left
.getLayoutParams();
RelativeLayout.LayoutParams layoutParams_1 = (RelativeLayout.LayoutParams) layout_right
.getLayoutParams();
layoutParams.leftMargin -= mScrollX;
layoutParams_1.leftMargin = window_width + layoutParams.leftMargin;
if (layoutParams.leftMargin >= 0) {
isScrolling = false;// 拖过头了不需要再执行AsynMove了
layoutParams.leftMargin = 0;
layoutParams_1.leftMargin = window_width;
} else if (layoutParams.leftMargin <= -MAX_WIDTH) {
// 拖过头了不需要再执行AsynMove了
isScrolling = false;
layoutParams.leftMargin = -MAX_WIDTH;
layoutParams_1.leftMargin = window_width - MAX_WIDTH;
}
// Log.v(TAG, "layoutParams.leftMargin=" + layoutParams.leftMargin
// + ",layoutParams_1.leftMargin =" + layoutParams_1.leftMargin);
layout_left.setLayoutParams(layoutParams);
layout_right.setLayoutParams(layoutParams_1);
}
/***
* 获取移动距离 移动的距离其实就是layout_left的宽度
*/
void getMAX_WIDTH() {
ViewTreeObserver viewTreeObserver = layout_left.getViewTreeObserver();
// 获取控件宽度
viewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
if (!hasMeasured) {
window_width = getWindowManager().getDefaultDisplay()
.getWidth();
MAX_WIDTH = layout_right.getWidth();
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) layout_left
.getLayoutParams();
RelativeLayout.LayoutParams layoutParams_1 = (RelativeLayout.LayoutParams) layout_right
.getLayoutParams();
ViewGroup.LayoutParams layoutParams_2 = mylaout
.getLayoutParams();
// 注意: 设置layout_left的宽度。防止被在移动的时候控件被挤压
layoutParams.width = window_width;
layout_left.setLayoutParams(layoutParams);
// 设置layout_right的初始位置.
layoutParams_1.leftMargin = window_width;
layout_right.setLayoutParams(layoutParams_1);
// 注意:设置lv_set的宽度防止被在移动的时候控件被挤压
layoutParams_2.width = MAX_WIDTH;
mylaout.setLayoutParams(layoutParams_2);
// Log.v(TAG, "MAX_WIDTH=" + MAX_WIDTH + "width="
// + window_width);
hasMeasured = true;
}
return true;
}
});
}
// 按返回键弹出对话框退出程序
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) layout_left
.getLayoutParams();
if (layoutParams.leftMargin < 0) {
new AsynMove().execute(SPEED);
return false;
} else
dialog();
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
view = v;// 记录点击的控件
// 松开的时候要判断,如果不到半屏幕位子则缩回去,
if (MotionEvent.ACTION_UP == event.getAction() && isScrolling == true) {
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) layout_left
.getLayoutParams();
// 缩回去
if (layoutParams.leftMargin < -window_width / 2) {
new AsynMove().execute(-SPEED);
} else {
new AsynMove().execute(SPEED);
}
}
return mGestureDetector.onTouchEvent(event);
}
@Override
public boolean onDown(MotionEvent e) {
int position = lv_set.pointToPosition((int) e.getX(), (int) e.getY());
if (position != ListView.INVALID_POSITION) {
View child = lv_set.getChildAt(position
- lv_set.getFirstVisiblePosition());
if (child != null)
child.setPressed(true);
}
mScrollX = 0;
isScrolling = false;
// 将之改为true,才会传递给onSingleTapUp,不然事件不会向下传递.
return true;
}
@Override
public void onShowPress(MotionEvent e) {
}
/***
* 点击松开执行
*/
@Override
public boolean onSingleTapUp(MotionEvent e) {
// 点击的不是layout_left
if (view != null && view == iv_set) {
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) layout_left
.getLayoutParams();
// 左移动
if (layoutParams.leftMargin >= 0) {
new AsynMove().execute(-SPEED);
lv_set.setSelection(0);// 设置为首位.
} else {
// 右移动
new AsynMove().execute(SPEED);
}
} else if (view != null && view == layout_left) {
RelativeLayout.LayoutParams layoutParams = (android.widget.RelativeLayout.LayoutParams) layout_left
.getLayoutParams();
if (layoutParams.leftMargin < 0) {
// 说明layout_left处于移动最左端状态,这个时候如果点击layout_left应该直接所以原有状态.(更人性化)
// 右移动
new AsynMove().execute(SPEED);
}
}
return true;
}
/***
* 滑动监听 就是一个点移动到另外一个点. distanceX=后面点x-前面点x,如果大于0,说明后面点在前面点的右边及向右滑动
*/
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// 执行滑动.
doScrolling(distanceX);
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
return false;
}
class AsynMove extends AsyncTask<Integer, Integer, Void> {
@Override
protected Void doInBackground(Integer... params) {
int times = 0;
if (MAX_WIDTH % Math.abs(params[0]) == 0)// 整除
times = MAX_WIDTH / Math.abs(params[0]);
else
times = MAX_WIDTH / Math.abs(params[0]) + 1;// 有余数
for (int i = 0; i < times; i++) {
publishProgress(params[0]);
try {
Thread.sleep(sleep_time);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
/**
* update UI
*/
@Override
protected void onProgressUpdate(Integer... values) {
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) layout_left
.getLayoutParams();
RelativeLayout.LayoutParams layoutParams_1 = (RelativeLayout.LayoutParams) layout_right
.getLayoutParams();
// 右移动
if (values[0] > 0) {
layoutParams.leftMargin = Math.min(layoutParams.leftMargin
+ values[0], 0);
layoutParams_1.leftMargin = Math.min(layoutParams_1.leftMargin
+ values[0], window_width);
// Log.v(TAG, "layout_left右" + layoutParams.leftMargin
// + ",layout_right右" + layoutParams_1.leftMargin);
} else {
// 左移动
layoutParams.leftMargin = Math.max(layoutParams.leftMargin
+ values[0], -MAX_WIDTH);
layoutParams_1.leftMargin = Math.max(layoutParams_1.leftMargin
+ values[0], window_width - MAX_WIDTH);
// Log.v(TAG, "layout_left左" + layoutParams.leftMargin
// + ",layout_right左" + layoutParams_1.leftMargin);
}
layout_right.setLayoutParams(layoutParams_1);
layout_left.setLayoutParams(layoutParams);
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) layout_left
.getLayoutParams();
// 只要没有滑动则都属于点击
if (layoutParams.leftMargin == -MAX_WIDTH)
switch (position) {
case 0:
Intent intent0 = new Intent(MainActivity.this, MoreSet.class);
startActivity(intent0);
overridePendingTransition(R.anim.push_left_in,
R.anim.push_left_out);// 右往左推出效果
break;
case 1:
Intent Intent1 = new Intent(MainActivity.this,
CaptureActivity.class);
startActivityForResult(Intent1, 0);
overridePendingTransition(R.anim.push_left_in,
R.anim.push_left_out);
break;
case 2:
Intent intent2 = new Intent(MainActivity.this,
MoreYiJianFanKui.class);
startActivity(intent2);
overridePendingTransition(R.anim.push_left_in,
R.anim.push_left_out);// 右往左推出效果
break;
case 3:
// Intent intent3=new Intent(MainActivity.this,MoreHelp.class);
// startActivity(intent3);
dialogShow();
break;
case 4:
checkDilog();
break;
case 5:
Intent intent5 = new Intent(MainActivity.this,
MoreUploadPhoto.class);
startActivity(intent5);
overridePendingTransition(R.anim.push_left_in,
R.anim.push_left_out);
break;
case 6:
Intent intent6 = new Intent(MainActivity.this, MoreAbout.class);
startActivity(intent6);
overridePendingTransition(R.anim.push_left_in,
R.anim.push_left_out);
break;
}
}
private void checkDilog(){
CharSequence[] items = { " 已是最新版本v1.0", " 进入官网" };
Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle(" 检查版本更新").setItems(items, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 1:
Intent intent4 = new Intent(MainActivity.this,
MoreCheckUpdate.class);
startActivity(intent4);
overridePendingTransition(R.anim.push_left_in,
R.anim.push_left_out);
break;
}
}
}).create().show();
}
private void dialogShow() {
// TODO Auto-generated method stub
Builder dialog = new Builder(MainActivity.this);
dialog.setMessage("是否联系客服?");
dialog.setTitle("提示");
dialog.setPositiveButton("是",
new android.content.DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:18255157509"));
startActivity(intent);
overridePendingTransition(R.anim.push_left_in,
R.anim.push_left_out);
}
});
dialog.setNegativeButton("否",
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialog.create().show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (requestCode == -1 || data == null)
return;
switch (resultCode) {
case 100:
Fragment currentFragment = getSupportFragmentManager()
.findFragmentById(R.id.fragment_user);
if (currentFragment instanceof UserFragment) {
((UserFragment) currentFragment).hideLogin();
}
break;
}
}
}
用户注册登录界面代码:
package com.gemptc.fashionrecipe.user;
import java.io.IOException;
import java.util.Observable;
import java.util.regex.Pattern;
import org.pixmob.httpclient.HttpClient;
import org.pixmob.httpclient.HttpResponse;
import org.pixmob.httpclient.HttpResponseHandler;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.Window;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.gemptc.fashionrecipe.R;
import com.gemptc.fashionrecipe.bo.CookUser;
import com.gemptc.fashionrecipe.bo.IP;
import com.google.gson.Gson;
public class RegisterActivity extends Activity {
// 邮箱格式
private final static Pattern emailer = Pattern
.compile("^([\\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\\.[a-zA-Z0-9_-]{2,3}){1,2})$");
private final static Pattern user = Pattern.compile("^([0-9])*$");
private ImageView registerReturnBtn;
private Button registerRegisterBtn;
private EditText registerUserNameEdit;
private EditText registerPasswordEdit;
private EditText registerPasswordAgainEdit;
private AutoCompleteTextView registerMailboxEdit;
String[] stringArray = { "@163.com", "@126.com", "@qq.com", "@sina.com",
"@gmail.com" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_register);
findViewById(R.id.loginbtn).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
EnterActivity instance = EnterActivity.instance;
if (instance != null) {
finish();
overridePendingTransition(R.anim.push_right_in,
R.anim.push_right_out);
} else {
finish();
Intent intent = new Intent(RegisterActivity.this,
EnterActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.push_left_in,
R.anim.push_left_out);
}
}
});
registerUserNameEdit = (EditText) findViewById(R.id.registerUserNameEdit);
registerPasswordEdit = (EditText) findViewById(R.id.registerPasswordEdit);
registerPasswordAgainEdit = (EditText) findViewById(R.id.registerPasswordAgainEdit);
registerRegisterBtn = (Button) findViewById(R.id.registerRegisterBtn);
registerReturnBtn = (ImageView) findViewById(R.id.registerReturnBtn);
registerMailboxEdit = (AutoCompleteTextView) findViewById(R.id.registerMailboxEdit);
registerUserNameEditListener();
registerPasswordEditListener();
registerPasswordAgainEditListener();
registerMailboxListener();
registerBtnListener();
registerReturnBtnListener();
}
public void registerUserNameEditListener() {
registerUserNameEdit
.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
if (registerUserNameEdit.getText().toString()
.trim().length() < 4) {
Toast.makeText(RegisterActivity.this,
"用户名不能小于4个字符", Toast.LENGTH_SHORT)
.show();
}
if (registerUserNameEdit.getText().toString()
.trim().length() > 0
&& isUser(registerUserNameEdit.getText()
.toString().trim())) {
Toast.makeText(RegisterActivity.this,
"用户名不能全为数字", Toast.LENGTH_SHORT).show();
}
}
}
});
}
private void registerPasswordEditListener() {
// TODO Auto-generated method stub
registerPasswordEdit
.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (!hasFocus) {
if (registerPasswordEdit.getText().toString()
.trim().length() < 6) {
Toast.makeText(RegisterActivity.this,
"密码不能小于6个字符", Toast.LENGTH_LONG).show();
}
}
}
});
}
private void registerPasswordAgainEditListener() {
registerPasswordAgainEdit
.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (!hasFocus) {
if (!registerPasswordAgainEdit
.getText()
.toString()
.trim()
.equals(registerPasswordEdit.getText()
.toString().trim())) {
Toast.makeText(RegisterActivity.this,
"两次密码输入不一致", Toast.LENGTH_SHORT).show();
}
}
}
});
}
// 邮箱的自动提示文本,自动填充邮箱后缀
public void registerMailboxListener() {
final MailboxAdatper mailboxAdatper = new MailboxAdatper(this);
registerMailboxEdit.setAdapter(mailboxAdatper);
registerMailboxEdit.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// 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 afterTextChanged(Editable s) {
String input = s.toString();
mailboxAdatper.mList.clear();
if (input.length() > 0) {
for (int i = 0; i < stringArray.length; ++i) {
mailboxAdatper.mList.add(input + stringArray[i]);
}
}
mailboxAdatper.notifyDataSetChanged();
registerMailboxEdit.showDropDown();
}
});
registerMailboxEdit
.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
}
});
}
private void registerBtnListener() {
// 注册按钮的监听,当点击注册按钮时,需要将user的注册信息传上服务器
// 再由服务器上传到数据库,服务器将返回一些信息给android客户端
registerRegisterBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!checkEdit()) {
return;
}
new ConnectServer().execute();
}
});
}
private void registerReturnBtnListener() {
registerReturnBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
overridePendingTransition(R.anim.push_right_in,
R.anim.push_right_out);
}
});
}
private boolean checkEdit() {
if (registerMailboxEdit.getText().toString().trim().equals("")) {
Toast.makeText(RegisterActivity.this, "邮箱不能有空", Toast.LENGTH_SHORT)
.show();
} else if (registerUserNameEdit.getText().toString().trim().equals("")) {
Toast.makeText(RegisterActivity.this, "用户名不能为空", Toast.LENGTH_SHORT)
.show();
} else if (registerUserNameEdit.getText().toString().trim().length() < 4) {
Toast.makeText(RegisterActivity.this, "用户名不能小于4个字符",
Toast.LENGTH_SHORT).show();
} else if (registerUserNameEdit.getText().toString().trim().length() > 0
&& isUser(registerUserNameEdit.getText().toString().trim())) {
Toast.makeText(RegisterActivity.this, "用户名不能全为数字",
Toast.LENGTH_SHORT).show();
} else if (registerPasswordEdit.getText().toString().trim().equals("")) {
Toast.makeText(RegisterActivity.this, "密码不能为空", Toast.LENGTH_SHORT)
.show();
} else if (registerPasswordAgainEdit.getText().toString().trim()
.equals("")) {
Toast.makeText(RegisterActivity.this, "密码不能为空", Toast.LENGTH_SHORT)
.show();
} else if (!registerPasswordAgainEdit.getText().toString().trim()
.equals(registerPasswordEdit.getText().toString().trim())) {
Toast.makeText(RegisterActivity.this, "两次密码输入不一致",
Toast.LENGTH_SHORT).show();
} else if (registerPasswordEdit.getText().toString().trim().length() < 6) {
Toast.makeText(RegisterActivity.this, "密码不能为少于6位",
Toast.LENGTH_SHORT).show();
} else {
boolean email = isEmail(registerMailboxEdit.getText().toString()
.trim());
if (email == false) {
Toast.makeText(RegisterActivity.this, "您的邮箱不合法", 2000).show();
}
return email;
}
return false;
}
/**
* 判断是不是一个合法的用户
*
* @param email
* @return
*/
public static boolean isUser(String user) {
if (user == null || user.trim().length() == 0)
return false;
return RegisterActivity.user.matcher(user).matches();
}
/**
* 判断是不是一个合法的电子邮件地址
*
* @param email
* @return
*/
public static boolean isEmail(String email) {
if (email == null || email.trim().length() == 0)
return false;
return emailer.matcher(email).matches();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.register, menu);
return true;
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 如果按下的是返回键,并且没有重复
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
finish();
overridePendingTransition(R.anim.push_right_in,
R.anim.push_right_out);// 右往左推出效果
return false;
}
return false;
}
class ConnectServer extends AsyncTask<String, Void, Void> {
private String serverMsg;
// 自己看着改
// private final String URL =
// "http://10.10.2.92:8080/FashionSer/RegisterServlet";
private final String URL = IP.RegisterServlet;
HttpResponseHandler handler = new HttpResponseHandler() {
public void onResponse(HttpResponse response) throws IOException {
StringBuilder sb = new StringBuilder();
response.read(sb);
serverMsg = sb.toString();
}
};
private ProgressDialog progressDialog;
/*
* 此方法在UI线程中执行任务被执行之后,立刻调用 UI线程。这步通常被用于设置任务,例如在用户界面显示一个进度条
*
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
// 创建ProgressDialog对象
progressDialog = new ProgressDialog(RegisterActivity.this);
// 设置进度条风格,风格为圆形,旋转的
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// 设置ProgressDialog 标题
progressDialog.setTitle("提示");
// 设置ProgressDialog 提示信息
progressDialog.setMessage("正在注册,请稍后...");
// 设置ProgressDialog 标题图标
// progressDialog.setIcon(R.drawable.wait);
// 设置ProgressDialog 的进度条是否不明确
progressDialog.setIndeterminate(false);
progressDialog.show();
}
/*
* *onPreExecute()完成执行,立刻调用后台线程,这步被用于执行较长时间的后台计算。 此方法在后台线程中执行
* 异步任务的参数也被传到这步。计算的结果必须在这步返回,将传回到上一步
*
* @see android.os.AsyncTask#doInBackground(Params[])
*/
@Override
protected Void doInBackground(String... params) {
// TODO Auto-generated method stub
HttpClient hc = new HttpClient(RegisterActivity.this);
try {
CookUser user = gatherUserInfo();
String json = new Gson().toJson(user);
hc.post(URL).content(json.getBytes("UTF-8"), "text/xml")
.to(handler).execute();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/*
* *此方法在UI线程中执行 当后台计算结束时,调用 UI线程。后台计算结果作为一个参数传递到这步
*
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
public void onPostExecute(Void result) {
if (null != progressDialog && progressDialog.isShowing()) {
progressDialog.dismiss();
}
Toast.makeText(RegisterActivity.this, serverMsg, Toast.LENGTH_SHORT)
.show();
if ("注册成功!".equals(serverMsg)) {
Intent intent = getIntent();
RegisterActivity.this.setResult(100, intent);
RegisterActivity.this.finish();
EnterActivity instance = EnterActivity.instance;
if (instance != null)
instance.finish();
SharedPreferences setSharedpre = getSharedPreferences(
"CookUser", MODE_PRIVATE);
SharedPreferences.Editor editor = setSharedpre.edit();
editor.putString("UserMailbox", registerMailboxEdit.getText()
.toString());
editor.putString("CUmima", registerPasswordEdit.getText()
.toString());
editor.putString("CUname", registerUserNameEdit.getText()
.toString());
editor.commit();
}
}
private CookUser gatherUserInfo() {
CookUser user = new CookUser();
user.setCUname(registerUserNameEdit.getText().toString());
user.setCUmima(registerPasswordEdit.getText().toString());
user.setUserMailbox(registerMailboxEdit.getText().toString());
return user;
}
}
}
搜索界面代码:
private void search(String key) {
AppInfo.putHistory(context, key);
String string = AppInfo.getHistory(context);
String search = string.substring(1, string.length());
String[] searchs = search.split(",");
List<String> list = new ArrayList<String>();
if (searchs.length <= 5) {
for (int i = searchs.length - 1; i >= 0; i--) {
list.add(searchs[i]);
}
}
if (searchs.length > 5) {
for (int i = searchs.length - 1; i >= searchs.length - 5; i--) {
list.add(searchs[i]);
}
}
searchHistory.clear();
searchHistory.addAll(list);
sAdapter.notifyDataSetChanged();
loadRecipe();
layout.setVisibility(View.GONE);
}
private void loadRecipe() {
categoryId = edit_search.getText().toString().trim();
final String[] from = new String[] { "img", "name", "kouwei", "gongyi",
"shijian" };
final int[] to = new int[] { R.id.creatrecipe_item_img,
R.id.createcipe_item_name, R.id.item_kw, R.id.item_gy,
R.id.item_time };
data = DataModel.getInfoRecipes(SearchActivity.this, categoryId, 0);
if (data.size() > 0) {
adapter = new ImageSimpleAdapter(SearchActivity.this, data,
R.layout.activity_createrecipe_list_item, from, to);
listView.setAdapter(adapter);
} else {
dialog();
}
new Thread(new Runnable() {
public void run() {
int i = 0;
while (i < data.size()) {
@SuppressWarnings("unchecked")
HashMap<String, Object> map = (HashMap<String, Object>) adapter
.getItem(i);
// 获取图片路径并保存到sd卡
String imagePath = DataModel.getImagePath(String
.valueOf(map.get("url")));
// 根据路径获取图片
Bitmap bmp = BitmapFactory.decodeFile(imagePath);
if (bmp == null) {
map.put("img", R.drawable.nopic);
} else
map.put("img", bmp);
i++;
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
}
}
}).start();
}
上传交流区主要代码:
public class UploadFragment extends Fragment implements IXListViewListener,
OnClickListener {
private View view;
private XListView listView;
private ImageView uploadBtn;
private List<Trends> listData = new ArrayList<Trends>();
private UploadAdapter adapter;
private RelativeLayout layout1;
private int pageCode = 1;
private String time;
public void start() {
// TODO Auto-generated method stub
if (!NetworkTools.isNetworkAvailable(getActivity())) { // 判断网络是否存在网络
layout1.setVisibility(View.GONE);
} else {
layout1.setVisibility(View.VISIBLE);
new Thread(new Handlers()).start();
super.onResume();
}
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// return super.onCreateView(inflater, container, savedInstanceState);
view = inflater.inflate(R.layout.upload, container, false);
init();
return view;
}
private void init() {
// 上传按钮
uploadBtn = (ImageView) view.findViewById(R.id.upload_btn);
uploadBtn.setOnClickListener(this);
listView = (XListView) view.findViewById(R.id.order_form_grid);
listView.setPullLoadEnable(true);
listView.setXListViewListener(this);
layout1 = (RelativeLayout) view.findViewById(R.id.upload_layout1);
failLoad = (ImageView) view.findViewById(R.id.fail_loading_img);
}
private Handler handler2 = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
pageCode = 1;
setView();
adapter.notifyDataSetChanged();
onLoad();
break;
case 2:
// setView();
adapter.notifyDataSetChanged();
onLoad();
break;
case 3:
listView.stopLoadMore();
Toast.makeText(getActivity(), "已到最后一页", Toast.LENGTH_SHORT)
.show();
break;
}
}
private void setView() {
// TODO Auto-generated method stub
adapter = new UploadAdapter(getActivity(), listData);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Trends trends = adapter.getTrend(position);
String trenId = trends.getTrenId();
String regiEmail = trends.getRegiEmail();
String regiName = trends.getRegiName();
String trenContent = trends.getTrenContent();
String trenTime = trends.getTrenTime();
String trenNumber = trends.getTrenNumber();
String regiImage = trends.getRegiImage();
String trenImage = trends.getTrenImage();
Intent intent = new Intent();
intent.setClass(getActivity(), UploadTalk.class);
intent.putExtra("trenId", trenId);
intent.putExtra("regiEmail", regiEmail);
intent.putExtra("regiName", regiName);
intent.putExtra("trenContent", trenContent);
intent.putExtra("trenTime", trenTime);
intent.putExtra("trenNumber", trenNumber);
intent.putExtra("regiImage", regiImage);
intent.putExtra("trenImage", trenImage);
if (!NetworkTools.isNetworkAvailable(getActivity())) {
layout1.setVisibility(View.GONE);
} else {
startActivity(intent);
}
}
});
}
};
private ImageView failLoad;
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.upload_btn:
Intent intent = new Intent(getActivity(), MoreUploadPhoto.class);
startActivity(intent);
getActivity().overridePendingTransition(R.anim.push_left_in,
R.anim.push_left_out);
break;
case R.id.fail_loading_img:
start();
break;
default:
break;
}
}
private class Handlers implements Runnable {
public void run() {
Looper.prepare();// 加入消息队列;
try {
listData = UploadService.getList(
// "http://10.10.2.53:8080/FashionSer/UploadServlet",
IP.uploadServlet,
// "http://10.10.2.28:8080/FashionSer/UploadServlet",
getActivity());
Message msg = UploadFragment.this.handler2.obtainMessage(1);
UploadFragment.this.handler2.sendMessage(msg);
} catch (Exception e) {
// TODO Auto-generated catch block
if(e.getMessage()=="NullPointerException"){
Toast.makeText(getActivity(), "您的网速不给力,请稍等哦...", Toast.LENGTH_SHORT).show();
layout1.setVisibility(View.GONE);
}
e.printStackTrace();
// Log.e("Upload service", e.getMessage());
}
Looper.loop();// 加入消息队列;
}
}
private class Handlers2 implements Runnable {
public void run() {
Looper.prepare();// 加入消息队列;
pageCode++;
try {
List<Trends> list = new ArrayList<Trends>();
list = UploadService.getList(IP.uploadServletPage
+ pageCode, getActivity());
listData.addAll(list);
Message msg = UploadFragment.this.handler2.obtainMessage(2);
UploadFragment.this.handler2.sendMessage(msg);
} catch (Exception e) {
// TODO Auto-generated catch block
Message msg = UploadFragment.this.handler2.obtainMessage(3);
UploadFragment.this.handler2.sendMessage(msg);
}
Looper.loop();// 加入消息队列;
}
}
private void onLoad() {
listView.stopRefresh();
listView.stopLoadMore();
listView.setRefreshTime(time);
}
// 顶部
@SuppressWarnings("deprecation")
@Override
public void onRefresh() {
// TODO Auto-generated method stub
if (!NetworkTools.isNetworkAvailable(getActivity())) {// 判断网络是否存在网络
layout1.setVisibility(View.GONE);
} else {
layout1.setVisibility(View.VISIBLE);
time = new Date().toLocaleString();
new Thread(new Handlers()).start();
}
}
// 底部
@Override
public void onLoadMore() {
// TODO Auto-generated method stub
if (!NetworkTools.isNetworkAvailable(getActivity())) {// 判断网络是否存在网络
layout1.setVisibility(View.GONE);
} else {
layout1.setVisibility(View.VISIBLE);
new Thread(new Handlers2()).start();
}
}
}
JDBC的连接:
package com.gemptc.fashionrecipe.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBLink {
static String driver = "com.mysql.jdbc.Driver";
static String url = "jdbc:mysql://localhost:3306/xm";
static String user = "root";
static String password = "1234";
public static Connection getConnect() {
try {
// 1、动态加载驱动文件 //导入驱动类
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user,
password);
System.out.println("连接成功---");
return connection;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("连接失败!!");
return null;
}
}
public static void main(String[] args) {
getConnect();
}
}
- 附录以及部分源代码
- Java游戏编程初步 (附录部分有moveball的完整源代码)
- 部分源代码
- 附录
- 附录
- 附录
- [C#] 利用部分方法添加调试代码(附录)
- 部分书籍的源代码
- 部分源代码资料
- Windows源代码部分公开
- QQ的部分源代码
- Windows源代码部分公开
- libevent部分源代码笔记 .
- Latex插入附录,证明,引理以及参考文献
- PetShop3.0 BLL部分源代码
- ipsec驱动源代码(部分)
- 石器外挂部分源代码2
- 【源代码】数字图像处理部分源码
- 开始我的博客
- 关于 Java 中 finally 语句块的深度辨析
- 装饰器(Decorater)
- PHP操作MSSQL数据库的类
- 黑马程序员—基础-基础语法知识总结-2
- 附录以及部分源代码
- Linux编程的几个重要知识点
- wait 和 sleep 区别?
- SQLite安全性的问题
- 【Leetcode】String to Integer (atoi)
- Linux 下安装配置 JDK7
- java.sql.SQLException: ORA-00911: invalid character 解决方法(转)
- ffmpeg、jrtp、SDL的交叉编译
- cacti监控mysql