安卓 Android之开发简单小应用(二)

安卓 Android之开发简单小应用(二) 

一、简述

        学生籍贯管理小应用练习,简单的一个小应用,用SQLite数据库进行数据存储。

        源文件打包:(附带txt文件存储版本)

       链接:https://pan.baidu.com/s/1iyev4ix7Jp5EXywKbB9QAg 密码:2zy5

二、效果



三、工程结构


四、源码文件

AddActivity.java文件

package com.example.stunpmng;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

@SuppressLint("NewApi") public class AddActivity extends Activity implements OnClickListener{

	private EditText _edtid,_edtname;//学号、姓名文本框
	private Spinner _spNP;//籍贯下拉选择框
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_add);//设置布局
		//获取控件对象
		Button btncel = (Button)findViewById(R.id.btn_cel);
		Button btnsur = (Button)findViewById(R.id.btn_sur);
		Button btnback = (Button)findViewById(R.id.btn_back);
		//监听单击事件
		btncel.setOnClickListener(this);
		btnsur.setOnClickListener(this);
		btnback.setOnClickListener(this);
		//成员变量初始化
		_edtid = (EditText)findViewById(R.id.edt_id);
		_edtname = (EditText)findViewById(R.id.edt_name);
		_spNP = (Spinner)findViewById(R.id.spn_np);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.add, menu);
		return true;
	}

	@Override
	public void onClick(View arg) {//处理单击事件
		switch (arg.getId()) 
		{
        	case R.id.btn_cel://取消按钮
        	case R.id.btn_back://返回按钮
        		//返回、并设置结果码为1
        		setResult(1,(new Intent()).setAction("MainActivity.class"));
        		finish();//关闭当前页面
        		break;
        	case R.id.btn_sur://确定按钮
        		String stu_num = _edtid.getText().toString().trim();//获取学号输入框的内容,并去掉前后空格
        		String stu_name = _edtname.getText().toString().trim();//获取姓名输入框的内容,并去掉前后空格
        		String NP = (String) _spNP.getSelectedItem();//获取籍贯下拉框选中的文本
        		Student st = new Student(null,stu_num,stu_name,NP);//根据输入信息创建新的对象
        		if(stu_num.isEmpty() || stu_name.isEmpty())//学号、姓名不能为空
        		{
        			//弹出小黑框提示,一会儿自动消失
        			Toast.makeText(this,"学号、姓名不能为空",Toast.LENGTH_SHORT).show();
        		}	
        		else
        		{
        			StuInfoDao dao = new StuInfoDao(this);//获取数据库操作类
        			//System.out.println(stu_num+"--"+stu_name+"--"+NP);
        			boolean b = dao.insert(st);//添加到数据库
            		if(b)
            		{
            			//添加成功,提示信息
            			Toast.makeText(this,"添加成功!",Toast.LENGTH_SHORT).show();
            		}
        		}
        		break;
		}
	}
	

}

MainActivity.java文件

package com.example.stunpmng;

import java.util.ArrayList;
import java.util.List;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.text.InputFilter;
import android.text.InputType;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;



@SuppressLint("NewApi") public class MainActivity extends Activity implements OnClickListener{
	
	public List<Student> list = new ArrayList<Student>();//用来存放所有的学生对象
	private TableLayout table;//用来展示数据
	private int index;//index是分页查询的起始索引
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//设置布局
        
        //根据ID获取控件的对象,ID在对应的布局文件可以查看,或者是在属性页面也有
        Button btnadd = (Button)findViewById(R.id.btn_add);
        Button btnsch = (Button)findViewById(R.id.btn_sch);
        Button btnnext = (Button)findViewById(R.id.btn_next);
        Button btnup = (Button)findViewById(R.id.btn_up);
        Button btnclr = (Button)findViewById(R.id.btn_clr);
        Button btnrfl = (Button)findViewById(R.id.btn_rfl);
        Button btnexit = (Button)findViewById(R.id.btn_exit);
        Button btnout = (Button)findViewById(R.id.btn_out);
        table = (TableLayout)findViewById(R.id.tab_show);
        table.setBackgroundColor(Color.GREEN);//设置背景色
        
        //监听按钮的点击事件,(意思就是当单击控件时本页面能够监听到并且响应 )
        btnadd.setOnClickListener(this);
        btnsch.setOnClickListener(this);
        btnnext.setOnClickListener(this);
        btnup.setOnClickListener(this);
        btnclr.setOnClickListener(this);
        btnrfl.setOnClickListener(this);
        btnexit.setOnClickListener(this);
        btnout.setOnClickListener(this);
        
        index = 0;//刚开始时从第一条数据开始展示
        Read();//读取数据库数据,存放到list集合中
        Show(index);//根据索引展示数据
    }

    

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


	@Override
	public void onClick(View arg) {//处理点击事件
		
		switch (arg.getId()) 
		{
        	case R.id.btn_add://添加按钮
        		Intent intent = new Intent(MainActivity.this,AddActivity.class);//跳转到添加信息页面
        		startActivityForResult(intent, 1);//设置请求码为1
        		break;
        	case R.id.btn_rfl://刷新按钮
        		table.removeAllViews();//清空table数据
        		Read();//重新读取数据库数据,放到list集合中
        		Show(index);//根据当前索引展示数据
        		break;
        	case R.id.btn_sch://查询按钮
        		EditText edtsch = (EditText)findViewById(R.id.edt_sch);//根据ID获取到文本输入对象
        		String target = edtsch.getText().toString().trim();//获取到文本输入框的内容并且去掉前后的空格
        		//Toast.makeText(this,"search:"+target,Toast.LENGTH_SHORT).show();
        		Read();//重新读取数据库数据,放到list集合中
        		if(target.isEmpty())//如果搜索文本为空,那么显示全部
        		{
        			Show(index);
        		}
        		else//搜索文本不为空
        		{
        			
        			for(int i=0;i<list.size();i++)//实现模糊查询,
        			{
        				//只要搜索关键字没有出现在学号、姓名、籍贯当中,就从list集合中去掉
        				if(( !target.equalsIgnoreCase(list.get(i).getNum())) &&(!list.get(i).getNum().contains(target))&& (!target.equalsIgnoreCase(list.get(i).getName())) && (!list.get(i).getName().contains(target))&&(!list.get(i).getNP().contains(target)) &&(!target.equalsIgnoreCase(list.get(i).getNP())))
        				{
        					list.remove(i);
        					--i;//进行删除后list的长度发生变化,后面的往前移,所以索引不用变,这里减1是要与后面的++相抵消
        				}
        			}
        			table.removeAllViews();//清空table
        			Show(0);//展示符合关键字的数据
        		}
        		break;
        	case R.id.btn_next://下一页按钮
        		if((index+5)<list.size()) index +=5;//索引加5,每页5条数据,索引值不能大于集合总数
        		Show(index);//根据当前索引显示数据
        		break;
        	case R.id.btn_up://上一页按钮
        		index -=5;//每次索引减5
        		if(index<0)//索引范围在0~list集合的总数
        		{
        			index = 0;//如果索引值小于0,将索引置为0
        		}
        		Show(index);//根据当前索引显示数据
        		break;
        	case R.id.btn_clr://清空数据库表数据,开发的时候方便自己测试,有时候数据是不合法的也存进去了,要清空
        		//弹出一个对话框,确认是否清空数据
        		AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    			builder.setTitle("操作");  //对话框标题
    	        builder.setMessage("您确定清空吗?");//设置对话框内容提示
    	        builder.setNegativeButton("取消",null); //添加一个取消按钮
    	        //添加一个确定按钮,并且单击时响应
    	        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {  
    	            @Override  
    	            public void onClick(DialogInterface dialog, int which)
    	            { 
    	            	StuInfoDao dao = new StuInfoDao(MainActivity.this);
    	            	dao.deleteTab(false);//清空表数据,如果是true那么是删除表
    	        		table.removeAllViews();//清空table数据
    	        		//弹出一个小黑框,一会自动隐去
    	            	Toast.makeText(MainActivity.this,"清空成功!",Toast.LENGTH_SHORT).show();  
    	            }  
    	        });  
    	        builder.show();//显示对话框
        		break;
        	case R.id.btn_exit://退出按钮
        		//弹出一个对话框,确认是否退出
        		AlertDialog.Builder builderExit = new AlertDialog.Builder(MainActivity.this);
        		builderExit.setTitle("退出");  //对话框标题
        		builderExit.setMessage("您确定退出吗?");//设置对话框内容提示
        		builderExit.setNegativeButton("取消",null); //添加一个取消按钮
        		//添加一个确定按钮,并且单击时响应
        		builderExit.setPositiveButton("确定", new DialogInterface.OnClickListener() {  
    	            @Override  
    	            public void onClick(DialogInterface dialog, int which) {  
    	            	finish();//关闭本页面
    	            }  
    	        });  
        		builderExit.show();
        		break;
        	case R.id.btn_out://导出按钮
        		Read();//重新读取数据库数据,放到list集合中
        		//弹出一个对话框,让用户输入文件名,路径默认
        		AlertDialog.Builder builderout = new AlertDialog.Builder(this);
        		builderout.setTitle("请输入文件名");  //对话框标题
        		final EditText edtname = new EditText(this);//创建一个文本输入框
    	        edtname.setSingleLine();//设置文本输入框为单行输入
    	        edtname.setFilters(new InputFilter[]{
    	        		new InputFilter.LengthFilter(64)//设置文本输入框的输入长度为64个字符
    	        });
    	        builderout.setView(edtname);//将文本输入框添加到对话框
    	        builderout.setNegativeButton("取消",null);  //添加一个取消按钮
    	      //添加一个确定按钮,并且单击时响应
    	        builderout.setPositiveButton("确定", new DialogInterface.OnClickListener() {  
    	            @Override  
    	            public void onClick(DialogInterface dialog, int which) { 
    	            
    	              String name = edtname.getText().toString().trim();//获取文本输入框的内容并且去掉前后空格
    	              if(name.isEmpty())//如果文件名为空
    	              {
    	            	  //弹出一个小黑框提示,一会儿会自动隐去
    	            	  Toast.makeText(MainActivity.this,"文件名不能为空!",Toast.LENGTH_SHORT).show();
    	              }
    	              else//如果文件名不为空
    	              {
    	            	  if(!name.endsWith(".txt"))//如果文件名不是以.txt结尾的
    	            	  {
    	            		  name += ".txt";//在结尾处添加.txt
    	            	  }
    	            	  StringBuilder content = new StringBuilder();//在对大量字符串操作时,StringBuilder优于String,因为String有唯一性
    	            	  for(int i=0;i<list.size();i++)
    	            	  {
    	            		  content.append(list.get(i).toString()+"\n");//将list集合中的数据以字符形式存放到content中
    	            	  }
    	            	  boolean b = TxtFile.Save(name,content.toString(),false);//将内容覆盖保存到txt文件中
    	            	  if(b) 
    	                  {	
    	            		  //如果保存成功,小黑框提示
    	            		  Toast.makeText(MainActivity.this,"导出成功!",Toast.LENGTH_SHORT).show();
    	                  }
    	              }
    	            }  
    	        });  
        		builderout.show();//弹出对话框
        		break;
    		}
        		
}
		
	
	@Override         //此函数是子activity关闭返回时执行的
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode ==1 && resultCode==1)//当请求码以及结果码为1时,(即添加信息页面关闭返回时)
        {
        	//当添加页面关闭返回是,主页面进行刷新操作
        	table.removeAllViews();//清空table数据
    		Read();//重新读取数据库数据,放到list集合中
    		Show(index);//根据索引展示当数据
    		System.out.println("刷新成功!");
        }
    }
	
	private void Read()
	{
		StuInfoDao dao = new StuInfoDao(MainActivity.this);//创建数据操作类
		list.clear();//清空list集合
		list = dao.search();//查询数据库,将数据填充到list
		
	}
	private void Show(int start)//根据索引展示数据,每页5条数据
	{
		if(list.size()<=0 || list.isEmpty())//数据为空不显示
		{
			return;
		}
		
		//调整使得strat、end在0~list集合索引之间
		if(start>=list.size())
		{
			start = list.size()-list.size()%5;
		}
		if(start<0)
		{
			start = 0;
		}
		int end = start+5;
		if(end >list.size())
		{
			end = list.size();
		}
		
		table.removeAllViews();//清空table数据
		for(int i=start;i<end;i++)//从start显示到end
		{//每次循环创建一行,一行有四个标签,分别显示序号、学号、姓名、籍贯
			
			TableRow row = new TableRow(MainActivity.this);//创建一行
			row.setId(i);//设置当前行ID
			row.setPadding(6,1,6,1);//设置内边距,左上右下
			row.setGravity(Gravity.CENTER);//居中
			row.setBackgroundColor(Color.GREEN);//设置行背景色
			
			TextView view0 = new TextView(MainActivity.this);//创建一个标签,用来显示序号
			view0.setText(i+1+"");//设置显示文本为"索引加1"
			view0.setGravity(Gravity.CENTER);//居中
			view0.setTextSize(18);//设置字体大小
			view0.setTextColor(Color.RED);//设置字体颜色
			view0.setPadding(10,2,10,2);//设置内边距
			row.addView(view0);//将序号标签添加到行
			
			TextView view1 = new TextView(MainActivity.this);//创建一个标签,用来显示学号
			view1.setText(list.get(i).getNum());//设置显示文本为学号
			view1.setGravity(Gravity.CENTER);
			view1.setTextSize(18);
			view1.setTextColor(Color.RED);
			view1.setPadding(10,2,10,2);
			row.addView(view1);//将学号标签添加到行
			
			TextView view2 = new TextView(MainActivity.this);//创建一个标签,用来显示姓名
			view2.setText(list.get(i).getName());//设置显示文本为姓名
			view2.setGravity(Gravity.CENTER);
			view2.setTextSize(18);
			view2.setTextColor(Color.RED);
			view2.setPadding(10,2,10,2);
			row.addView(view2);//将姓名标签添加到行
			
			TextView view3 = new TextView(MainActivity.this);//创建一个标签,用来显示籍贯
			view3.setText(list.get(i).getNP());//设置显示文本为籍贯
			view3.setGravity(Gravity.CENTER);
			view3.setTextSize(18);
			view3.setTextColor(Color.RED);
			view3.setPadding(10,2,10,2);
			row.addView(view3);//将籍贯标签添加到行
			
			if(i%2==0) //偶数背景色为蓝色
			{
				row.setBackgroundColor(Color.argb(255, 64, 158, 211));
			}
			//为每一行添加 长按事件  (长按弹出编辑框) 并传递索引
			row.setOnLongClickListener(new MyListener(i));
			table.addView(row);//将行添加到table中
		}
	}
    
	private class MyListener implements OnLongClickListener
	{//处理长按事件
		private EditText edtid,edtname;//学号、姓名编辑框(籍贯不用改)
		int n = 0;//根据n找到对应的对象
		public MyListener(int i)
		{
			super();
			this.n = i;//接收长按时传递过来的索引
		}
		
		@Override
		public boolean onLongClick(View arg0)
		{
			if(n<0 || n>=list.size())
			{
				return true;
			}
			//弹出编辑框
			AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
			builder.setTitle("操作");  //设置标题
			//创建一个网格布局,用来放置两个标签、两个输入框
	        GridLayout grid = new GridLayout(MainActivity.this);
	        grid.setColumnCount(2);//设置网格的列数
	        
	        TextView viewNP = new TextView(MainActivity.this);//创建籍贯标签
	        viewNP.setText("籍贯:"+list.get(n).getNP());//设置文本
	        grid.addView(viewNP, 0);//将籍贯标签添加到网格布局的第1列
	        
	        TextView viewname = new TextView(MainActivity.this);//创建姓名标签
	        viewname.setText("姓名:");//设置标签文本
	        edtname = new EditText(MainActivity.this);//创建一个输入框
	        edtname.setSingleLine();//设置单行输入
	        edtname.setFilters(new InputFilter[]{
	        		new InputFilter.LengthFilter(4)//设置输入长度
	        });
	        
	        //viewname.setLeft(0);
	        edtname.setText(list.get(n).getName());//设置文本框内容
	        grid.addView(viewname, 0);//将姓名标签添加到网格布局中
	        grid.addView(edtname, 1);//将文本框添加到网格布局中
	        
	        TextView viewid = new TextView(MainActivity.this);//创建学号标签
	        viewid.setText("学号:");
	        edtid = new EditText(MainActivity.this);//创建学号输入框
	        edtid.setSingleLine();//设置为单行输入
	        edtid.setFilters(new InputFilter[]{
	        		new InputFilter.LengthFilter(4)//设置输入长度
	        });
	        edtid.setInputType(InputType.TYPE_CLASS_NUMBER);//设置为只能输入数字
	        edtid.setText(list.get(n).getNum());//设置文本
	        grid.addView(viewid, 0);//将学号标签添加到网格布局
	        grid.addView(edtid, 1);//将学号输入框添加到网格布局
	        
	        builder.setView(grid);//将网格布局添加到对话框中
	        builder.setNegativeButton("取消",null); //添加取消按钮
	        //添加一个删除按钮,并添加点击事件处理
	        builder.setNeutralButton("删除", new DialogInterface.OnClickListener() {  
	            @Override  
	            public void onClick(DialogInterface dialog, int which) {
	            	
	            	String sid = list.get(n).getId();//获取长按项对应的学生ID
	            	StuInfoDao dao = new StuInfoDao(MainActivity.this);//创建数据库操作类
	            	//list.clear();//清空集合
	            	//list = dao.search();//读取数据库,并将数据填充到list
	            	dao.delete(sid);//删除ID对应的学生信息
	            	table.removeAllViews();//清除table数据
	            	Read();//读取数据库,并将数据填充到list
	            	Show(index);//刷新,根据索引值显示数据
	            	//弹出小黑框提示删除成功,一会儿自动隐去
	            	Toast.makeText(MainActivity.this,"删除成功!",Toast.LENGTH_SHORT).show();
	            }  
	        });
	        //添加修改按钮,并添加点击事件处理
	        builder.setPositiveButton("修改", new DialogInterface.OnClickListener() {  
	            @Override  
	            public void onClick(DialogInterface dialog, int which) {  
	            	String sid = list.get(n).getId();//获取长按项对应的学生ID
	            	String stu_num = edtid.getText().toString().trim();//获取修改后的学号,并去掉前后空格
	            	String stu_name = edtname.getText().toString().trim();//获取修改后的姓名,并去掉前后空格
	            	if(stu_num.isEmpty() || stu_name.isEmpty())//如果修改后的学号或姓名为空
	            	{
	            		//提示不能为空
	            		Toast.makeText(MainActivity.this,"学号、姓名不能为空!",Toast.LENGTH_SHORT).show(); 
	            	}
	            	else//修改后的数据合法
	            	{
	            		//根据修改后的信息,新建一个student对象
	            		Student st = new Student(sid,stu_num,stu_name,list.get(n).getNP());
		            	StuInfoDao dao = new StuInfoDao(MainActivity.this);//创建数据库操作类
		            	dao.update(st);//更新数据
		            	table.removeAllViews();//清空table数据
		            	Read();//读取数据库,并将数据填充到list
		            	Show(index);//刷新,根据索引值显示数据
		            	//提示修改成功
		            	Toast.makeText(MainActivity.this,"修改成功!",Toast.LENGTH_SHORT).show();  
	            	}
	            	
	            }  
	        });  
	        builder.show(); //弹出编辑框
			return true;
		}
	}
}

MySQLHelper.java文件

package com.example.stunpmng;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class MySQLHelper extends SQLiteOpenHelper {

	public MySQLHelper(Context context) {
		super(context, "mydatabase.db", null, 1);//创建mydatabase.db数据库,版本号为1
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		//创建studentNP表  _id字段为主键,自增 ,num字段存储学号、varchar类型,长度为8,name字段存储姓名,类型为varchar,长度为8,np字段存储籍贯,类型为varchar,长度为64
		db.execSQL("create table studentNP (_id integer primary key autoincrement, num varchar(8),name varchar(8),np varchar(64))");
			
	}

	@Override
	public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
		// TODO Auto-generated method stub

	}

}

Student.java文件

package com.example.stunpmng;

public class Student {
	private String id;//ID
	private String num;//学号
	private String name;//姓名
	private String np;//籍贯名
	
	//下面的是属性 (对字段的保护)
	public String getId() {
		return id;
	}
	
	public void setId(String id) {
		this.id = id;
	}
	public String getNum() {
		return num;
	}
	public void setNum(String num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getNP() {
		return np;
	}
	public void setNP(String np) {
		this.np = np;
	}
	//有参构造函数 (方便构造对象)
	public Student(String id,String num,String name, String np) {
		super();
		this.id = id;
		this.num = num;
		this.name = name;
		this.np = np;
	}
	//无参构造对象 (如果有有参构造函数,最好加上无参构造函数)
	public Student() {
		super();
	}
	@Override //重写toString()方法,将一个对象的数据信息变为字符串格式,方便存储到txt文件中
	public String toString() {
		return num + "-" + name + "-" + np;
	}
}

StuInfoDao.java文件

package com.example.stunpmng;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class StuInfoDao {
	MySQLHelper helper;//成员变量
	
	public StuInfoDao(Context context){
		
		helper = new MySQLHelper(context);//创建一个SQLHelper
	}
	
	public boolean insert(Student st){//添加操作
		//拿到 工具类的实例 , 然后去操作 数据库 
		SQLiteDatabase db = helper.getWritableDatabase();
		//执行 sql 语句 主键自增,不用设置
		db.execSQL("insert into studentNP values(null,?,?,?)",new Object[]{st.getNum(),st.getName(),st.getNP()});
		return true;
	}
	
	public void delete(String id){
		//根据ID删除信息
		SQLiteDatabase db = helper.getWritableDatabase();
		db.execSQL("delete from studentNP where _id=?",new Object[]{id});
		
	}
	
	public void deleteTab(boolean isDrop){//清空表数据,或删除表,此处是为了方便程序测试,因为可能编写过程中不合法的数据也添加进去了,需要进行清空操作
		
		SQLiteDatabase db = helper.getWritableDatabase();
		if(isDrop)
		{
			db.execSQL("drop table studentNP ");//删除表
		}
		else
		{
			db.execSQL("delete from studentNP ");//清空表的数据
		}
		
	}
	public void update(Student st){//根据对象进行更新操作
		
		SQLiteDatabase db = helper.getWritableDatabase();
		db.execSQL("update studentNP set num=?,name=?,np=? where _id=?", new Object[]{st.getNum(),st.getName(),st.getNP(),st.getId()});
	}
	
	public Student find(String id){//根据ID进行查找对应的student信息,例子中没有用到
		
		SQLiteDatabase db = helper.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from studentNP where _id=?", new String[]{id});
		
		boolean result = cursor.moveToNext();//是否有下一条数据
		Student st = null;
		if(result){

			int _id = cursor.getInt(cursor.getColumnIndex("_id"));//获取ID
			String snum = cursor.getString(cursor.getColumnIndex("num"));//获取学号
			String name = cursor.getString(cursor.getColumnIndex("name"));//获取姓名
			String sex =  cursor.getString(cursor.getColumnIndex("np"));//获取籍贯
			
			st = new Student(String.valueOf(_id),snum,name,sex);//将数据放入新的对象
			
		}
		
		// 最后会释放 资源 
		cursor.close();
	
		return st;
	}
	
public List<Student> search(){//查询所有的信息
		
		SQLiteDatabase db = helper.getReadableDatabase();
		List<Student> list = new ArrayList<Student>();
		list.clear();//清空数据
		//查询全部数据
	    Cursor cursor = db.rawQuery("select * from studentNP" ,null);
	   
	    while(cursor.moveToNext()){
			
	    	int _id = cursor.getInt(cursor.getColumnIndex("_id"));
			String snum = cursor.getString(cursor.getColumnIndex("num"));
			String name = cursor.getString(cursor.getColumnIndex("name"));
			String sex =  cursor.getString(cursor.getColumnIndex("np"));
		
			Student st = new Student(String.valueOf(_id),snum,name,sex);
			list.add(st);//将新对象添加到list集合
			
		}
				
				
			
		
	    //System.out.println("数目:"+list.size());
		// 最后会释放 资源 
		cursor.close();
		
		return list;//将所有信息返回
	}
}

TextFile.java文件

package com.example.stunpmng;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import android.os.Environment;

public class TxtFile {//保存文件工具类      //fileName:文件名称             content:文件内容          isAppend:是否追加(否则覆盖)
	public static boolean Save(String fileName,String content,boolean isAppend) 
	{  
		
        //在文本文本中追加内容 
		String sdCardDir =Environment.getExternalStorageDirectory().getAbsolutePath();
		
		File file = new File(sdCardDir,fileName);
		//System.out.println(sdCardDir);
		BufferedWriter out = null;  
        try {
        	if(!file.exists())//如果文件不存在
        	{
        		file.createNewFile();//创建文件
        	}
        	FileOutputStream outStream = new FileOutputStream(file,isAppend);
        	outStream.write(content.getBytes());
        	outStream.close();//记得关闭流
            System.out.println("save success!");
            return true;
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if(out != null){  
                    out.close();  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }
		return false;  
    } 
}

五、总结

1、添加SDcard读写权限



2、打开File Explorer窗口 (虚拟设备的文件列表)




3、下拉框的选项内容在activity_add.xml布局文件中

  • 18
    点赞
  • 1
    评论
  • 59
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
7个经典Android应用程序实例源代码: 2012-01-02 15:15 <DIR> CityWeather 2012-01-02 15:15 <DIR> FileManager 2012-01-02 15:15 <DIR> MobileMap 2012-01-02 15:15 <DIR> MusicPlayer 2012-01-02 15:15 <DIR> MyContacts 2012-01-02 15:15 <DIR> RingProfile 2012-01-02 15:15 <DIR> TodayDate Android 培训示例大全--18个单项功能实例源码: 2012-01-02 16:02 <DIR> Androidxxx 2012-01-02 16:02 <DIR> LinearLayoutGridMenu 2012-01-02 16:02 <DIR> proj_background 2012-01-02 16:02 <DIR> proj_messenger 2012-01-02 16:02 <DIR> proj_test 2012-01-02 16:02 <DIR> proj_test1 2012-01-02 16:02 <DIR> proj_webxml 2012-01-02 16:02 <DIR> 下拉列表 2012-01-02 16:02 <DIR> 代码布局 2012-01-02 16:02 <DIR> 单选、多选按钮 2012-01-02 16:02 <DIR> 图片按钮 2012-01-02 16:02 <DIR> 对话框 2012-01-02 16:02 <DIR> 数字测试 2012-01-02 16:02 <DIR> 测试 2012-01-02 16:02 <DIR> 自动补全 2012-01-02 16:02 <DIR> 菜单 2012-01-02 16:02 <DIR> 表格框架布局 2012-01-02 16:02 <DIR> 进度条 Android 文件下载功能Java多线程下载功能的例子实例源码: 2012-01-02 16:02 <DIR> 文件下载 Android 小项目开发示例大全--20个通用具体应用程序实例源码: 2012-01-02 16:26 <DIR> 备忘录 2012-01-02 16:30 <DIR> 定时器 2012-01-02 16:29 <DIR> 客户端 2012-01-02 16:30 <DIR> 广播 2012-01-02 16:30 <DIR> 播放器 2012-01-02 16:26 <DIR> 数据存储 2012-01-02 16:26 <DIR> 数据库 2012-01-02 16:30 <DIR> 文件解析 2012-01-02 16:26 <DIR> 日历 2012-01-02 16:30 <DIR> 服务器 2012-01-02 16:26 <DIR> 桌面小程序 2012-01-02 16:26 <DIR> 画图 2012-01-02 16:30 <DIR> 相册 2012-01-02 16:26 <DIR> 计算器 2012-01-02 16:26 <DIR> 记事本 2012-01-02 16:30 <DIR> 谷歌地图 2012-01-02 16:30 <DIR> 贪吃蛇 2012-01-02 16:30 <DIR> 适配器 2012-01-02 16:26 <DIR> 通知功能 2012-01-02 16:26 <DIR> 阅读器 《Android程序源码--贪吃蛇》 《Android应用开发详解教材源码(上册)--10个单元40多个实例源码》 《Android应用开发详解教材源码(下册)--8个单元30多个实例源码》 《Mp3播放器源码Android实战项目源码》 《安卓Android俄罗斯方块游戏--完整游戏项目源码》 《安卓Android开源小说阅读器CoolReader源码》 《安卓Android中国象棋Chess程序源码》">7个经典Android应用程序实例源代码: 2012-01-02 15:15 <DIR> CityWeather 2012-01-02 15:15 <DIR> FileManager 2012-01-02 15:15 <DIR> MobileMap 2012-01-02 15:15 <DIR> MusicPlayer 2012-01-02 15:15 <DIR> MyContacts 2012-01-02 15:15 <DIR> RingProfile 20 [更多]
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页