乐学成语

来源:互联网 发布:优酷淘宝返利搞笑视频 编辑:程序博客网 时间:2024/04/28 05:12

工程目录如下


具体实现过程以及写的过程中遇到的问题

第一步:建立数据库

第二步 :导入数据库将idioms.db复制到ras文件夹下的raw文件夹若没有建一个

在db包中建DBOpenHelper.java代码如下

public class DBOpenHelper {

       privatefinal int BUFFER_SIZE=400000;//缓冲区大小

       publicstatic final String DB_NAME="idioms.db"; //保存的数据库文件名

       publicstatic final String PACKAGE_NAME="com.example.happyidiom";//应用的包名

       publicstatic final String DB_PATH="/data"

       +Environment.getDataDirectory().getAbsolutePath()+"/"

       +PACKAGE_NAME+"/databases";//在手机里存放数据库的位置

       privateContext context;

       publicDBOpenHelper(Context context){

              this.context=context;

       }

       publicSQLiteDatabase openDatabase(){

             

              try{

              FilemyDataPath=new File(DB_PATH);

              if(!myDataPath.exists()){

                     myDataPath.mkdirs();//如果没有这个数据库则创建

              }

              Stringdbfile=myDataPath+"/"+DB_NAME;

              if(!(newFile(dbfile).exists())){//判断数据库文件是否存在,若不存在直接导入,

                     //否则直接打开数据库

                     InputStreamis=context.getResources().openRawResource(R.raw.idioms);

                     FileOutputStreamfos=new FileOutputStream(dbfile);

                     byte[]buffer=new byte[BUFFER_SIZE];

                     intcount=0;

                     while((count=is.read(buffer))>0){

                            fos.write(buffer,0,count);

                     }

                     fos.close();

                     is.close();

              }

              SQLiteDatabasedb=SQLiteDatabase.openOrCreateDatabase(dbfile, null);

              returndb;

              }catch(FileNotFoundExceptione){

                     Log.e("Database","Filenot found");

                     e.printStackTrace();

              }

              catch(IOExceptione){

                     Log.e("Database","IOexception");

                     e.printStackTrace();

              }

       returnnull;

       }

}

在test包下新建DBOpenHelperTest.java测试一下 代码如下

public class DBOpenHelperTest extends AndroidTestCase{

      

       publicvoid testDBCopy(){

              DBOpenHelperdBOpenHelper=new DBOpenHelper(getContext());

              dBOpenHelper.openDatabase();

       }

}出现如下图视为成功


在entity下建立实体类Animal.java

 

public class Animal {

       privateint id;

       privateString name;

       privateString pronounce;

       privateString explain;

       privateString autonym;

       privateString homoionym;

       privateString derivation;

       privateString examples;

       public intgetId() {

              returnid;

       }

       publicvoid setId(int id) {

              this.id= id;

       }

       publicString getName() {

              returnname;

       }

       publicvoid setName(String name) {

              this.name= name;

       }

       publicString getPronounce() {

              returnpronounce;

       }

       publicvoid setPronounce(String pronounce) {

              this.pronounce= pronounce;

       }

       publicString getExplain() {

              returnexplain;

       }

       publicvoid setExplain(String explain) {

              this.explain= explain;

       }

       publicString getAutonym() {

              returnautonym;

       }

       publicvoid setAutonym(String autonym) {

              this.autonym= autonym;

       }

       publicString getHomoionym() {

              returnhomoionym;

       }

       publicvoid setHomoionym(String homoionym) {

              this.homoionym= homoionym;

       }

       publicString getDerivation() {

              returnderivation;

       }

       publicvoid setDerivation(String derivation) {

              this.derivation= derivation;

       }

       publicString getExamples() {

              returnexamples;

       }

       publicvoid setExamples(String examples) {

              this.examples= examples;

       }

       }

在dao包建立AnimalDao.java

public class AnimalDao {

       privatestatic AnimalDao animalDao;

       privateSQLiteDatabase db;

       /**

        * 将构造方法私有化

        */

       privateAnimalDao(Context context){

              DBOpenHelperdbHelper =new DBOpenHelper(context);

              db=dbHelper.openDatabase();

       }

       /**

        * 获取AnimalDao的实例

        */

       publicsynchronized static AnimalDao getInstance(Context context){

              if(animalDao==null){

                     animalDao=newAnimalDao(context);

              }

              returnanimalDao;

       }

       /**

        * 从数据库获取所有的动物类成语

        */

       publicList<Animal> getAllAnimals(){

              List<Animal>list=new ArrayList<Animal>();

              Cursorcursor =db.query("animal",null, null,null,null,null,null);

              if(cursor.moveToFirst()){

                     do{

                            Animalanimal=new Animal();

                            animal.setId(cursor.getInt(cursor.getColumnIndex("_id")));

                            animal.setName(cursor.getString(cursor.getColumnIndex("name")));

                            animal.setPronounce(cursor.getString(cursor.getColumnIndex("pronounce")));

                            animal.setAutonym(cursor.getString(cursor.getColumnIndex("antonym")));

                            animal.setHomoionym(cursor.getString(cursor.getColumnIndex("homoionym")));

                            animal.setDerivation(cursor.getString(cursor.getColumnIndex("derivation")));

                            animal.setExamples(cursor.getString(cursor.getColumnIndex("explain")));

               list.add(animal);

                     }while(cursor.moveToNext());

              }

              returnlist;

       }

 

}

进行单元测试:在test下建立AnimalDaotest.Java

public class AnimalDaoTest extends AndroidTestCase{

       publicvoid testGetAllAnimals(){

              AnimalDaoanimalDao=AnimalDao.getInstance(getContext());

              List<Animal>animals=animalDao.getAllAnimals();

              System.out.println(animals.size());

              for(Animalanimal:animals){

                     System.out.println(animal.getName());

              }

       }}

出现下图视为测试成功



UI界面

Activity_main.xml 代码如下

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"

   xmlns:tools="http://schemas.android.com/tools"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   tools:context=".MainActivity" >

    <TabHost

       android:id="@android:id/tabhost"

       android:layout_width="match_parent"

       android:layout_height="match_parent"

       android:layout_alignParentLeft="true"

       android:layout_alignParentTop="true"

        >

   <LinearLayout

       android:layout_width="match_parent"

       android:layout_height="match_parent"

       android:orientation="vertical"

        >

       <FrameLayout

       android:id="@android:id/tabcontent"

        android:layout_width="match_parent"

       android:layout_height="match_parent"

       android:layout_weight="1"

            >

           <LinearLayout

                android:id="@+id/tab1"

                android:orientation="vertical"

                android:layout_width="match_parent"

                android:layout_height="match_parent"

               >

           </LinearLayout>

           <LinearLayout

                android:id="@+id/tab2"

                android:orientation="vertical"

                 android:layout_width="match_parent"

                android:layout_height="match_parent"

               >

           </LinearLayout>

           <LinearLayout

                android:id="@+id/tab3"

                android:orientation="vertical"

                android:layout_width="match_parent"

                android:layout_height="match_parent"

               >

           </LinearLayout>

       </FrameLayout>

       <TabWidget

           android:id="@android:id/tabs"

            android:layout_width="match_parent"

       android:layout_height="wrap_content">

       </TabWidget>

   </LinearLayout>

   </TabHost>

</RelativeLayout>

TabHost介绍

TabHost可以在界面中存放多个选项卡

1.TabHost常用组件
TabWidget :
该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡;
TabSpec : 代表了选项卡界面, 添加一个TabSpec即可添加到

2.       TabHost中;
--
创建选项卡 : newTabSpec(String tag), 创建一个选项卡;
-- 添加选项卡 : addTab(tabSpec)

然后在res的values目录的string.xml文件中定义

<?xmlversion="1.0" encoding="utf-8"?>

<resources>

 

    <stringname="app_name">HappyIdiom</string>

    <stringname="action_settings">Settings</string>

    <stringname="hello_world">Hello world!</string>

    <stringname="title_activity_main">MainActivity</string>

    <stringname="title_search">搜搜</string>

    <string name="title_study">学习</string>

    <string name="title_game">游戏</string>

    <string name="title_save">收藏</string>

    <string name="title_help">帮助</string>

    <string name="animal">动物类</string>

    <string name="number">数字类</string>

 

    <string-arrayname="category">

        <item>动物类</item>

        <item>数字类</item>

        <item>人物类</item>

        <item>季节类</item>

        <item>自然类</item>

        <item>寓言类</item>

        <item>其他类</item>

    </string-array>

接下来在activity中建立MainActivity.java

 

publicclass MainActivity extends TabActivity {

   private TabHost tabHost;

 

   @Override

   protected void onCreate(BundlesavedInstanceState) {

          super.onCreate(savedInstanceState);

          requestWindowFeature(Window.FEATURE_NO_TITLE);

          setContentView(R.layout.activity_main);

          tabHost=getTabHost();

   addTab("study",R.string.title_study,R.drawable.study,StudyActivity.class);

   addTab("search",R.string.title_search,R.drawable.search,StudyActivity.class);

          addTab("game",R.string.title_game,R.drawable.game,StudyActivity.class);

          addTab("save",R.string.title_save, R.drawable.save, StudyActivity.class);

          addTab("help",R.string.title_help, R.drawable.help, StudyActivity.class);

   }

   private void addTab(String tag,inttitle_introduction,int title_icon,Class ActivityClass){

          tabHost.addTab(tabHost.newTabSpec(tag)

                        .setIndicator(getString(title_introduction),

                                      getResources().getDrawable(title_icon))

                        .setContent(newIntent(this,ActivityClass)));

   }

 

   @Override

   public boolean onCreateOptionsMenu(Menu menu){

          // Inflate the menu; this adds itemsto the action bar if it is present.

          getMenuInflater().inflate(R.menu.main,menu);

          return true;

   }}

在这个类里调用TabHost组件, 然后调用了抽取出来的自定义的方法addTob()添加了五个选项卡,方法的四个参数分别为每个选项卡的tag,指示器上显示的标题。,指示器上显示的图片,选项卡对应的内容。

中间出现的错误

1.    如果在非黑色背景下使用ListView控件时,Android默认可能在滚动ListView时这个列表控件的背景突然变成黑色。这样可能导致程序的黑色的背景和主程序的主题既不协调

2.    出现以下错误这是不能实例类java.lang.RuntimeException:Unable to instantiate activityComponentInfo

百度结果不能实例化Activity有以下二中情况:1.没有在Manifest.xml清单中注册该activity,或者在创建完activity后,修改了包名或者activity的类名,而配置清单中没有修改,造成不能实例化2.自己新建一个包,而配置的时候,使用默认包

0 0
原创粉丝点击