Android第四次作业
1、团队成员信息
姓名 | 学号 | 班级 | 博客 |
马秀莲 | 1600802052 | 162 | 博客链接 |
马玉花 | 1600802051 | 162 | 博客链接 |
2、apk链接
3、代码链接
4、介绍团队项目
4.1、团队项目总体效果截图
(1)登录界面: (2)注册界面 (3)首页界面:
(4)圆通界面 (5)中通界面: (6)韵达界面
(7)申通界面 (8)消息界面 (9)帮助界面
(10)关于我的界面 (11)发布动态界面 (12)好友列表界面
4.2、实现的功能及其效果的描述:
(1)登录界面:登录界面来判断你的用户名是否存在,若不存在,提示登陆失败,若已注册,则登陆成功至首页界面
(2)注册界面:实现与数据库连接·,注册用户信息,实现登陆。
(3)首页界面包含多个功能界面,其中首页实现的功能界面包含:四个图片(圆通、中通、韵达、申通)点击响应,跳转至相应功能界面;主界面的图片自动播放功能;消息界面;帮助界面;我的界面。
(4)圆通界面:包含四个fragment界面,一个返回界面,四个fragment界面实现点击响应出现旁边界面变化,相当于一个导航界面。
(5)中通界面:包括一些文字图片显示。
(6)韵达界面:包含四个按钮,一个textview,按前三个按钮,textview内容相应改变,最后一个按钮返回。
(7)申通界面:与韵达界面是一样的功能。
(8)消息界面:实现多选框,一个edittext,将这里面获取到的内容显示到一个textview;
(9)帮助界面:实现了一个文字显示界面。
(10)我的界面:包含四个按钮,其中第一个按钮时发布动态功能界面,第二个是好友列表功能实现,第三个是一个链接转入淘宝界面,第四个返回界面。
(11)发布动态界面,包含一个ImageView、一个EditText、一个TextView,其中TextView来显示所发布的内容。
(12)好友列表实现:使用ListView实现图片与文字的显示。具体代码如下第5条。
5、项目关键代码
(1)注册使用到的:
1、建数据库
public class Database extends SQLiteOpenHelper { static String name="student.db"; static int version=1; public static final String sql = "create table student(name text primary key,"+"username text,password text)"; // public static final String sql1 = "create table space(message text)"; public Database( Context context) { super(context, name, null, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(sql); // db.execSQL(sql1); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS student"); //db.execSQL("DROP TABLE IF EXISTS space"); onCreate(db); } }
2、建数据表
SQLiteDatabase sdb=dbHelper.getReadableDatabase(); String sql="insert into student(name,username,password) values(?,?,?)"; Object obj[]={student.getUsername(),student.getName(),student.getPwd()}; sdb.execSQL(sql,obj); return true;
3、判断信息注册是否完整
if(!"".equals(username)&&!"".equals(name)&&!"".equals(pwd)) { if(!pwd.equals(repwd)) { Toast.makeText(Register.this,"两次输入的密码不一致,请重新输入!",Toast.LENGTH_LONG).show(); ((EditText)findViewById(R.id.pwd)).setText("");//清空密码编辑框 ((EditText)findViewById(R.id.repwd)).setText(""); ((EditText)findViewById(R.id.pwd)).requestFocus(); } else { StudentService stuser = new StudentService(Register.this); Student stu = new Student(); stu.setUsername(username); stu.setName(name); stu.setPwd(pwd); stuser.register(stu); Toast.makeText(Register.this, "注册成功", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(Register.this,"请将注册信息输入完整",Toast.LENGTH_LONG).show(); } }
(2)登录界面:
1、查询数据方法
public boolean login(String username,String password) { SQLiteDatabase sdb=dbHelper.getReadableDatabase(); String sql="select * from student where username=? and password=?"; Cursor cursor=sdb.rawQuery(sql,new String[]{username,password}); if(cursor.moveToFirst()==true) { cursor.close(); return true; } return false; }
2、判断是否登录
public void onClick(View v) { String name = username.getText().toString(); String pass = password.getText().toString(); StudentService stuser = new StudentService(MainActivity.this); boolean flag = stuser.login(name,pass); if(flag){ Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_LONG).show(); Intent intent=new Intent(MainActivity.this,MyhMxl.class); startActivity(intent); }else{ Toast.makeText(MainActivity.this, "用户名或密码错误", Toast.LENGTH_LONG).show(); } }
(3)主界面图片自动轮播:
private ViewPager viewPager; private boolean is_state = false; private ArrayList<ImageView> imageViews; //图片数组 private final int IMAGES[] = {R.drawable.m1, R.drawable.m2, R.drawable.m3, R.drawable.m4, R.drawable.m5, R.drawable.m6}; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int item = viewPager.getCurrentItem() +1; viewPager.setCurrentItem(item); handler.sendEmptyMessageDelayed(0,1000); } };
class MyAdapter extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE; } @Override public Object instantiateItem(ViewGroup container, int position) { int relPosition = position%imageViews.size(); ImageView imageView = imageViews.get(relPosition); container.addView(imageView); imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: handler.removeCallbacksAndMessages(null); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: handler.removeCallbacksAndMessages(null); handler.sendEmptyMessageDelayed(0,1000); break; } return true; } }); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } }
(4)fragment主要代码
FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.fragment_place, fr); ft.addToBackStack(null); ft.commit();
(5)提交消息主要代码
public void onClick(View v) { String leixing=""; if(leixing1.isChecked()) { leixing+=leixing1.getText().toString()+" "; } if(leixing2.isChecked()) { leixing+=leixing2.getText().toString()+" "; } if(leixing3.isChecked()) { leixing+=leixing3.getText().toString()+" "; } if(leixing4.isChecked()) { leixing+=leixing4.getText().toString()+" "; } String str1=leixing; String shu = ((EditText) findViewById(R.id.shu)).getText().toString(); Intent intent=new Intent(Message1.this,Message1.class); Bundle bundle=new Bundle(); bundle.putString("shu",shu); String str2=shu; String str=str1+str2; TextView tv1 = (TextView)findViewById(R.id.show); tv1.setText(str); } });
(6)消息界面的动图代码
需要先导入一个jar包:GifView.jar
layout代码
<com.ant.liao.GifView android:id="@+id/gif1" android:layout_height="match_parent" android:layout_width="match_parent" android:paddingRight="14px" android:enabled="false" android:textDirection="anyRtl"/>
java代码:
GifView gif = (GifView)findViewById(R.id.gif1); gif.setGifImage(R.drawable.we); gif.setShowDimension(1000, 1000); gif.setGifImageType(GifView.GifImageType.COVER);
(7)好友列表
public class ImageAdapter extends ArrayAdapter{ private final int resourceId; public ImageAdapter(Context context, int textViewResourceId, List<Image> objects) { super(context, textViewResourceId, objects); resourceId = textViewResourceId; } @Override public View getView(int position, View convertView, ViewGroup parent) { Image image = (Image) getItem(position); // 获取实例 View view = LayoutInflater.from(getContext()).inflate(resourceId, null); ImageView peopleImage = (ImageView) view.findViewById(R.id.image_mxl); TextView peopleName = (TextView) view.findViewById(R.id.tuname); peopleImage.setImageResource(image.getImageId()); peopleName.setText(image.getName()); return view; } }
6、5名最优apk评论
第一名:
第二名:
第三名:
第四名:
第五名:
7、遇到的问题,以及解决方法
我和队员在写这个app的时候遇到的问题主要总结以下三点:
(1)各个组件显示位置问题
在首页,我们的项目各个组件显示我们是用绝对位置的方式显示,因为每个·人手机屏幕尺寸不一样,所以在我和队员在试用的时候出现我舍友的手机中可以完全显示,但是我的手机页面不会完全显示出来以为我的手机屏幕尺寸较小。暂时解决方法是尽量调整位置为中等。
(2)创建第二张数据表问题
第二个问题就是关于数据表的问题,在创建第一个数据表的时候我们的项目是完全可以的,可以存进去数据,但是在创建第二个的时候表都创建不起来,一直提示错误,试了很多种方法,但是始终不行。选择使用数组将页面获取的数据存入数据,每次获取一个数据,就动态改变数组大小,且存入数组,但是运行的时候出现程序强制退出。最后使用textview来显示,但是始终有一个缺点就是第二次发布时textview的内容就会被更新。
(3)创建第一个数据表成功,但是从数据库中提取数据的问题
使用取数据来显示登录者的用户名,在我的界面里面,但还是因为出错的情况下取消了这一功能,在后续的留言或者消息功能里面数据表就创建错误的情况下显示都是在textview中。