您的位置:首页 > 其它

使用xutil建新建项目,并保存到listView中进行显示

2016-12-16 13:55 330 查看
丢人丢大了,渣渣发现不了问题,所以问出渣渣的问题,被大神给zaopi了,因此总结出这重要的功能,为后期,开发app做原材料!!!!!!1

关于程序中要注意的问题:

1,新建类时,要大写!!!!!!!!!!!!!!!(规范)

2,如果要使用context一定要付初始值!!!!!!!!!!!!!!!!!!!!!!!!!Context context=this  或者若避免使用context,就使用XXXActivity.this!!!!!!!!!!!! 保险不出差错

3,在onresume()中写需要刷新的操作,不然显示就容易滞后!!!!!!!!!!!!!!11

写该功能的思路是:

1,导包!!!!!!!!!!在建libs文件夹装xutil.jar

2,权限!!!!!!!!

 <uses-permission android:name="android.permission.INTERNET"/>

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  3,注意xutil的用法:

(1,)数据库的初始化放在Application中,而且,必须提供获得数据库的方法--------------------------注意!!!!!!!!!!要在manifest.xml中写上application的名字!!!!!

(2)关于具体的注解模块详细见程序内部

4,建立一个activity,写一些内容,然后保存在数据库中,-----------------------(1,额外建表,2,简单的xml)

package com.example.xutility;

import org.xutils.DbManager;

import org.xutils.x;

import org.xutils.ex.DbException;

import org.xutils.DbManager.DaoConfig;

import org.xutils.view.annotation.ContentView;

import org.xutils.view.annotation.Event;

import org.xutils.view.annotation.ViewInject;

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

@ContentView (R.layout.activity_main)----------------------------------------------xutil使用方法-----绑定xml

public class MainActivity extends Activity {
//写项目名---------------------------------------------------------
4000
------xutil的使用方法

@ViewInject(R.id.ed_project)

private EditText ed_project;

//写地址

@ViewInject(R.id.ed_address)

private EditText ed_address;

//创地址

@ViewInject(R.id.btn_create)

private Button btn_create;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(this);-----------------------------------------------------------xutil用法------声明自己的初始化控件

}

@Event(value={R.id.btn_create})

private void Onclick(View v)

{

DiaoyongTable table=new DiaoyongTable();----------------------------
table.insert();---------------------------------------------------------------

finish();

}

class DiaoyongTable {
DaoConfig daoConfig=Xutil.getDaoConfig(); 
DbManager db = x.getDb(daoConfig); 
//不能有下面一行,不然就会报错------------------------不能在自己类中初始化自己的类
//DiaoyongTable table=new DiaoyongTable();

void insert() {  ----------------------------------------------------方法:将写的数据保存在数据库中

        

           UseDb person=new UseDb();  

      person.setAddress(ed_address.getText().toString());------------------------将EditText中的内容保存

      person.setProject_name(ed_project.getText().toString());-----------------------将EditText中的内容保存

/////////////////////////////////////////////////////////////////////////////////////////////// 

   String liu= person.toString();

     System.out.println(liu);

      try {
db.save(person);

} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

         //db.saveOrUpdate(person);  

         //db.saveBindingId(person);  
}

///////////////////////////////////////////////////////////////////////////////////////////////////此部分可以不要,是在log中打印

}

}

5,建一个数据库映射表(实体表)-----------------------------其中包含两个数据源:1,项目名2,地址

package com.example.xutility;

import org.xutils.db.annotation.Column;

import org.xutils.db.annotation.Table;

@Table(name="person")-------------------------------------------------------xutil使用方法-------表名

public class UseDb {
@Column(name="id",isId=true,autoGen=true)------------------------xutil使用方法----表头第一列
private int id;

@Column(name="project_name")-----------------------xutil使用方法----表头第2列
private String project_name;

@Column(name="address")----------------------------------------xutil使用方法----表头第3列
private String address;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getProject_name() {
return project_name;
}

public void setProject_name(String project_name) {
this.project_name = project_name;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

public String toString()
{
return "打印一切:"+"id"+id+"工程名字:    "+project_name+" address:    "+address;
}

}

6,数据库的初始化,必须放在Application中,且必须提供获得数据库的方法!使得程序在任何地方都可以直接获得数据库!!!

package com.example.xutility;

import java.io.File;

import org.xutils.DbManager;

import org.xutils.DbManager.DaoConfig;

import org.xutils.DbManager.DbUpgradeListener;

import org.xutils.x;

import android.app.Application;

import android.os.Environment;
/**通过XUti.getDaoConfig()方法,我们能够获取到一个DaoConfig对象。通过getDaoConfig()方法,

 * 我们可以知道这个方法主要可以做以下事情:

1.setDbName 设置数据库的名称 

2.setDbDir 设置数据库存放的路径 

3.setDbVersion 设置数据库的版本 

4.setAllowTransaction(true) 设置允许开启事务 

5.setDbUpgradeListener 设置一个版本升级的监听方法 

那么具体我们什么时候创建的表呢?如果我们单纯的调用XUti.getDaoConfig()方法是不能够创建PersonTable这个实体

对应的person这张表的,那么如何创建表呢?

只需要一下几步: 

1.DaoConfig daoConfig=XUtil.getDaoConfig(); 

2.DbManager db = x.getDb(daoConfig); 

 * 

 */

/*

 * 在程序中创建一个数据库和如何生成表--------数据库的初始化

 * */

public class Xutil extends Application{
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
x.Ext.init(this);----------------------------------------xutil的用法不可少
x.Ext.setDebug(BuildConfig.DEBUG);------------xutil的用法不可少

}
 static DbManager.DaoConfig daoConfig;  
   public static DaoConfig getDaoConfig(){  -------------------获得数据库的方法
    //
       File file=new File(Environment.getExternalStorageDirectory().getPath());  -----数据库存放的位置
       if(daoConfig==null){  
           daoConfig=new DbManager.DaoConfig()  
           .setDbName("shiyan.db")  
           .setDbDir(file)  
           .setDbVersion(1)  
           .setAllowTransaction(true) ; 
         
       }  
       return daoConfig;  
   }  

}

7,为了使数据可以在listView中显示,所以,要写一个初始listView的类!!!!!!!!

package listview;

import java.util.List;

import org.xutils.x;

import com.example.otherActivity.AcceptActivity;

import com.example.xutility.R;

import com.example.xutility.UseDb;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

public class listAdapter extends BaseAdapter {
private List<UseDb> list;  -------------存放数据源
Context context;
ViewHolder holder;----------------避免卡顿

//必须要加上public,不然, 默认为私有,在其他包中就不能调用
public listAdapter(Context context, List<UseDb> list)------------------------构造方法!!不可少
{
this.context=context;
this.list=list;
}
@Override---------------------------------------------重写BaseAdapter 方法--------为数据源存放做准备----不可少
public int getCount() {
// TODO Auto-generated method stub
// 一定要加一个判断语句
if (null != list)

return list.size();
return 0;
}

@Override--------------重写BaseAdapter 方法--------为数据源存放做准备----不可少
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}

@Override--------------重写BaseAdapter 方法--------为数据源存放做准备----不可少
public long getItemId(int position) {
// TODO Auto-generated method stub
return  position;
}

@Override--------------重写BaseAdapter 方法--------为数据源存放做准备----不可少-----获得控件的位置
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
holder=new ViewHolder();

if( convertView==null)
{//得到一个inflater对象,为获得布局做准备
System.out.println("dddeeeeeeeeeeeeee");

//获得布局

convertView = LayoutInflater.from(context).inflate(--------------如果马虎,这里易出错!!!显示空指针,一定要检查关于context,控件,还有初始化等处是否出现错误
R.layout.listview,null);

System.out.println("222222");
//取得控件
holder.tv_project=(TextView) convertView.findViewById(R.id.tv_project);
holder.tv_address=(TextView) convertView.findViewById(R.id.tv_address);
//做标记,记录第一搜到控件
convertView.setTag(holder);
}else
{

holder=(ViewHolder) convertView.getTag();
}
//从数据库中取得数据
UseDb pdb = list.get(position);

//将获得的数据在控件中显示
holder.tv_project.setText(pdb.getProject_name());
holder.tv_address.setText(pdb.getAddress());

return convertView;

}

static class ViewHolder{
TextView tv_project;
TextView tv_address;
 
}

}

8,在Activity中显示listView中获得的数据

package com.example.otherActivity;

import java.util.ArrayList;

import java.util.List;

import org.xutils.DbManager;

import org.xutils.x;

import org.xutils.ex.DbException;

import org.xutils.view.annotation.ContentView;

import org.xutils.view.annotation.Event;

import org.xutils.view.annotation.ViewInject;

import com.example.xutility.DiaoyongTable;

import com.example.xutility.MainActivity;

import com.example.xutility.R;

import com.example.xutility.UseDb;

import com.example.xutility.Xutil;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.ListView;

import android.widget.Toast;

import listview.listAdapter;

@ContentView(R.layout.acceptactivity)

public class AcceptActivity extends Activity {

@ViewInject(R.id.btn_jianyige)

Button btn_jianyige;

@ViewInject(R.id.listView1)

ListView lv;

private List<UseDb> list;  

Context context=this;//////////!!!!!!!!!!!!!!!!!!!!!一定要赋值

DbManager db = x.getDb(Xutil.getDaoConfig());

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
x.view().inject(AcceptActivity.this);

getProjectList();
}

/**

 * 获取项目列表数据

 */

private void getProjectList() {

try {
list = db.selector(UseDb.class).findAll();-------------关键句子-----获得数据
System.out.println("dsss");
updateView();-------------------------------更新listView中的数据
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

//更新listView保证每一次接收到的值都可以在listView显示----------建数组适配器和加载适配器

private void updateView() {
System.out.println("1111111111111111111111111111111111111111");
listAdapter adapter=new listAdapter(this,list);/////// 此处的this可以是AcceptActivity.this
                                                 /////也可以是context,但是context必须付初始值
System.out.println("21111");
lv.setAdapter(adapter);-----------------------------加载适配器
System.out.println("333eeeeeeee3");

}

@Event(value={R.id.btn_jianyige})

private void OnClick(View v)

{switch (v.getId()) {

case R.id.btn_jianyige:
//getProjectList();
Intent intent=new Intent(AcceptActivity.this,MainActivity.class);

startActivity(intent);
break;

default:
break;

}

}

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

下面不可少!!!不然程序显示就会滞后

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
getProjectList();
}

}

关于xml中控件

1,第一个anctivity.xml

<RelativeLayout xmlns: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"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context="com.example.xutility.MainActivity" >

    <EditText

        android:id="@+id/ed_project"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentRight="true"

        android:layout_below="@+id/textView1"

        android:ems="10" >

        <requestFocus />

    </EditText>

    <TextView

        android:id="@+id/tv_project"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentTop="true"

        android:layout_marginTop="48dp"

      

        android:text="项目名" />

    <TextView

        android:id="@+id/tv_address"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

     

        android:layout_alignParentLeft="true"

        android:layout_marginBottom="17dp"

        android:text="地址" />

    <Button

        android:id="@+id/btn_create"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentBottom="true"

        android:layout_alignParentLeft="true"

        android:text="创建" />

    <EditText

        android:id="@+id/ed_address"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/ed_project"

        android:layout_below="@+id/tv_project"

        android:layout_marginTop="17dp"

        android:ems="10" />

</RelativeLayout>

1,第2个anctivity.xml

<?xml version="1.0" encoding="utf-8"?>

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

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical">

    <TextView

        android:id="@+id/textView1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="在此处显示" />

    <Button

        android:id="@+id/btn_jianyige"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="建一个" />

    <ListView

        android:id="@+id/listView1"

        android:layout_width="match_parent"

        android:layout_height="wrap_content" >

    </ListView>

</LinearLayout>

3,第三个xml关于listView的

<?xml version="1.0" encoding="utf-8"?>

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

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <TextView

        android:id="@+id/tv_project"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_weight="0.16"

        android:text="" />

    <TextView

        android:id="@+id/tv_address"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_weight="0.16"

        android:text="" />

</LinearLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐