android四大组件之ContentProvider

ContentProvider的实现过程

1、定义一个CONTENT_URI常量,提供了访问ContentProvider的标识符。 

?
1
public static final Uri CONTENT_URI = Uri.parse( "content://com.example.codelab.transportationprovider" );

2、在AndroidManifest.xml当中进行声明。

?
1
2
3
4
<!-- android:name是完成ContentProvider类的全称
              android:authorities是和FirstProvidermetaData中的常量AUTHORITY的值一样,否则会报错
          -->
         <provider android:name= "com.bj.FirstContentProvider" android:authorities= "com.bj.firstcontentprovider" ></provider>

  
示例:
1
2
3
4
/** * 创建表的操作 *@paramsqLiteDatabase*/@Overridepublic voidonCreate(SQLiteDatabase sqLiteDatabase) { Log.i("test","onCreate");//创建表sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,name,age)"); }//数据库版本:低---->高@Overridepublic voidonUpgrade(SQLiteDatabase sqLiteDatabase,inti,inti1) { Log.i("test","onUpgrade"); }}
package com.zking.g150825_andorid16_sqlite;

import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.zking.db.DbHelper;

public class MainActivity extends ListActivity {

    private EditText et_main_id;
    private EditText et_main_name;
    private EditText et_main_age;
    private SQLiteDatabase db;

    private SimpleCursorAdapter simpleCursorAdapter;
    private Cursor cursor;
    private ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化DbHelper
        DbHelper dbHelper=new DbHelper(this,"person.db",null,2);
        //获取SQLiteDataBase对象(类似Hibernate中Session)
        db = dbHelper.getReadableDatabase();
        //获取ListView
        listview = getListView();
        initViews();
        //查询所有
        cursor = db.query(false,"person",null,null,null,null,null,null,null);
        //循环游标
        //把值放入list
        //设置适配器
        //SimpleCursorAdapter
        simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_listview, cursor,new String[]{"_id","name","age"},new int[]{R.id.tv_item_list_id,R.id.tv_item_list_name,R.id.tv_item_list_age});
        listview.setAdapter(simpleCursorAdapter);

        initEvents();//初始化事件


    }

    private void initEvents() {

        //给ListView添加长按事件
        listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                //获取点击的每一行的值
                LinearLayout root= (LinearLayout) view;
               String id=((TextView)root.findViewById(R.id.tv_item_list_id)).getText().toString();
               String name=((TextView)root.findViewById(R.id.tv_item_list_name)).getText().toString();
               String age=((TextView)root.findViewById(R.id.tv_item_list_age)).getText().toString();
                //弹出对话框(自定义)
                final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);

                final AlertDialog dialog=builder.create();

                //设置点击空白,不取消对话框
                dialog.setCancelable(false);


                //解析布局文件
                View v=getLayoutInflater().inflate(R.layout.dialog_listview,null);
                ((TextView)v.findViewById(R.id.tv_dialog_listview_id)).setText("修改:"+id);
                ((EditText)v.findViewById(R.id.et_dialog_listview_name)).setText(name);
                ((EditText)v.findViewById(R.id.et_dialog_listview_age)).setText(age);

                ((Button)v.findViewById(R.id.btn_dialog_listview_sure)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(MainActivity.this, "执行修改操作", Toast.LENGTH_SHORT).show();
                        dialog.dismiss();//关闭当前的对话框
                    }
                });
                ((Button)v.findViewById(R.id.btn_dialog_listview_cancel)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        dialog.dismiss();//关闭当前的对话框
                    }
                });

                dialog.setView(v);
                dialog.show();
                return true;
            }
        });


    }

    private void initViews() {
        et_main_id = (EditText) findViewById(R.id.et_main_id);
        et_main_name = (EditText) findViewById(R.id.et_main_name);
        et_main_age = (EditText) findViewById(R.id.et_main_age);
    }

    public void save(View view){
        String name=et_main_name.getText().toString();
        int age=Integer.parseInt(et_main_age.getText().toString());

        //保存到数据库中
        ContentValues values=new ContentValues();//Map
        values.put("name",name);
        values.put("age",age);
        values.putNull("_id");
        db.insert("person","name",values);
        Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();

        cursor=queryAllPerson(null);
        //通知适配器发生改变
        simpleCursorAdapter.changeCursor(cursor);
    }

    public Cursor queryAllPerson(String name){
        //Cursor cursor=db.query(false,"person",null,null,null,null,null,null,null);
        Cursor cursor;
        if(!"".equals(name)){
            Log.i("test","name="+name);
            cursor=db.rawQuery("select * from person where name like ? limit ?,?",new String[]{"%"+name+"%",2+"",2+""});
        }else{
            Log.i("test","查询所有");
            cursor = db.rawQuery("select * from person",null);
        }
        return cursor;
    }

    public void query(View view){
//        if(!TextUtils.isEmpty(et_main_name.getText())){
            String name=et_main_name.getText().toString();
            cursor=queryAllPerson(name);
            //通知适配器发生改变
            simpleCursorAdapter.changeCursor(cursor);
    }


}

SQLite操作类DBOpenHelper
package com.zking.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/** * Created by Administrator on 2016/12/14. */
public class DbHelper extends SQLiteOpenHelper {
/** * @param context 上下文
* @param name 数据库名字(文件名)
* @param factory 数据库工厂(null)
* @param version 数据库版本 */
public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super (context, name, factory, version);
Log. i ( "test" , "构造方法" ); } /** * 创建表的操作 * @param sqLiteDatabase */ @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { Log. i ( "test" , "onCreate" ); //创建表 sqLiteDatabase.execSQL( "create table person(_id integer primary key autoincrement,name,age)" ); } //数据库版本:低---->高 @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { Log. i ( "test" , "onUpgrade" ); }}


package com.zking.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * Created by Administrator on 2016/12/14. */ public class DbHelper extends SQLiteOpenHelper { /** * @param context 上下文 * @param name 数据库名字(文件名) * @param factory 数据库工厂(null) * @param version 数据库版本 */ public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super (context, name, factory, version); Log. i ( "test" , "构造方法" ); }




/** * 创建表的操作 * @param sqLiteDatabase */ @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { Log. i ( "test" , "onCreate" ); //创建表 sqLiteDatabase.execSQL( "create table person(_id integer primary key autoincrement,name,age)" ); } //数据库版本:低---->高 @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { Log. i ( "test" , "onUpgrade" ); }}
内容提供者


1
2
3
4
packagecom.zking.db;importandroid.content.Context;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteOpenHelper;importandroid.util.Log;/** * Created by Administrator on 2016/12/14. */public class DbHelperextendsSQLiteOpenHelper {/** *@paramcontext上下文 *@paramname数据库名字(文件名) *@paramfactory数据库工厂(null) *@paramversion数据库版本 */publicDbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,intversion) {super(context, name, factory, version); Log.i("test","构造方法"); }









/** * 创建表的操作 *@paramsqLiteDatabase*/@Overridepublic voidonCreate(SQLiteDatabase sqLiteDatabase) { Log.i("test","onCreate");//创建表sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,name,age)"); }//数据库版本:低---->高@Overridepublic voidonUpgrade(SQLiteDatabase sqLiteDatabase,inti,inti1) { Log.i("test","onUpgrade"); }}
示例:
1
2
3
4
/** * 创建表的操作 *@paramsqLiteDatabase*/@Overridepublic voidonCreate(SQLiteDatabase sqLiteDatabase) { Log.i("test","onCreate");//创建表sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,name,age)"); }//数据库版本:低---->高@Overridepublic voidonUpgrade(SQLiteDatabase sqLiteDatabase,inti,inti1) { Log.i("test","onUpgrade"); }}
package com.zking.g150825_andorid16_sqlite;

import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.zking.db.DbHelper;

public class MainActivity extends ListActivity {

    private EditText et_main_id;
    private EditText et_main_name;
    private EditText et_main_age;
    private SQLiteDatabase db;

    private SimpleCursorAdapter simpleCursorAdapter;
    private Cursor cursor;
    private ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化DbHelper
        DbHelper dbHelper=new DbHelper(this,"person.db",null,2);
        //获取SQLiteDataBase对象(类似Hibernate中Session)
        db = dbHelper.getReadableDatabase();
        //获取ListView
        listview = getListView();
        initViews();
        //查询所有
        cursor = db.query(false,"person",null,null,null,null,null,null,null);
        //循环游标
        //把值放入list
        //设置适配器
        //SimpleCursorAdapter
        simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_listview, cursor,new String[]{"_id","name","age"},new int[]{R.id.tv_item_list_id,R.id.tv_item_list_name,R.id.tv_item_list_age});
        listview.setAdapter(simpleCursorAdapter);

        initEvents();//初始化事件


    }

    private void initEvents() {

        //给ListView添加长按事件
        listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                //获取点击的每一行的值
                LinearLayout root= (LinearLayout) view;
               String id=((TextView)root.findViewById(R.id.tv_item_list_id)).getText().toString();
               String name=((TextView)root.findViewById(R.id.tv_item_list_name)).getText().toString();
               String age=((TextView)root.findViewById(R.id.tv_item_list_age)).getText().toString();
                //弹出对话框(自定义)
                final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);

                final AlertDialog dialog=builder.create();

                //设置点击空白,不取消对话框
                dialog.setCancelable(false);


                //解析布局文件
                View v=getLayoutInflater().inflate(R.layout.dialog_listview,null);
                ((TextView)v.findViewById(R.id.tv_dialog_listview_id)).setText("修改:"+id);
                ((EditText)v.findViewById(R.id.et_dialog_listview_name)).setText(name);
                ((EditText)v.findViewById(R.id.et_dialog_listview_age)).setText(age);

                ((Button)v.findViewById(R.id.btn_dialog_listview_sure)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(MainActivity.this, "执行修改操作", Toast.LENGTH_SHORT).show();
                        dialog.dismiss();//关闭当前的对话框
                    }
                });
                ((Button)v.findViewById(R.id.btn_dialog_listview_cancel)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        dialog.dismiss();//关闭当前的对话框
                    }
                });

                dialog.setView(v);
                dialog.show();
                return true;
            }
        });


    }

    private void initViews() {
        et_main_id = (EditText) findViewById(R.id.et_main_id);
        et_main_name = (EditText) findViewById(R.id.et_main_name);
        et_main_age = (EditText) findViewById(R.id.et_main_age);
    }

    public void save(View view){
        String name=et_main_name.getText().toString();
        int age=Integer.parseInt(et_main_age.getText().toString());

        //保存到数据库中
        ContentValues values=new ContentValues();//Map
        values.put("name",name);
        values.put("age",age);
        values.putNull("_id");
        db.insert("person","name",values);
        Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();

        cursor=queryAllPerson(null);
        //通知适配器发生改变
        simpleCursorAdapter.changeCursor(cursor);
    }

    public Cursor queryAllPerson(String name){
        //Cursor cursor=db.query(false,"person",null,null,null,null,null,null,null);
        Cursor cursor;
        if(!"".equals(name)){
            Log.i("test","name="+name);
            cursor=db.rawQuery("select * from person where name like ? limit ?,?",new String[]{"%"+name+"%",2+"",2+""});
        }else{
            Log.i("test","查询所有");
            cursor = db.rawQuery("select * from person",null);
        }
        return cursor;
    }

    public void query(View view){
//        if(!TextUtils.isEmpty(et_main_name.getText())){
            String name=et_main_name.getText().toString();
            cursor=queryAllPerson(name);
            //通知适配器发生改变
            simpleCursorAdapter.changeCursor(cursor);
    }


}



package com.zking.provide;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.util.Log;

import com.zking.db.DbHelper;

/**
 * Created by Administrator on 2017/2/6.
 */
public class provide_person extends ContentProvider{
    private SQLiteDatabase db;
    private UriMatcher uriMatcher;

    @Override
    public boolean onCreate() {
        Log.i("test","PersonProvider,onCreate");

        DbHelper dbHelper=new DbHelper(getContext(),"question.db",null,1);
        db = dbHelper.getReadableDatabase();

        //URI匹配器
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        //给URI匹配器中添加匹配规则
        uriMatcher.addURI("com.zking.g150725_android16_sqlite.PERSON","person",0);
        uriMatcher.addURI("com.zking.g150725_android16_sqlite.PERSON","person/#",1);
        return false;
    }

    @Nullable
    @Override
    public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
        Log.i("test","query");
        //开始匹配
        Cursor cursor=null;
                cursor=db.query(false,"person",strings,s,strings1,null,null,s1,null);

        return cursor;
    }

    @Nullable
    @Override
    public String getType(Uri uri) {
        Log.i("test","getType");
        return null;
    }

    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues contentValues) {
        Log.i("test","insert");
        db.insert("person",null,contentValues);
        return null;
    }

    @Override
    public int delete(Uri uri, String s, String[] strings) {
        db.delete("person",s,strings);
        return 0;
    }

    @Override
    public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
       db.update("person",contentValues,s,strings);
        return 0;
    }
} 


import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.zking.db.DbHelper;

public class MainActivity extends ListActivity {

    private EditText et_main_id;
    private EditText et_main_name;
    private EditText et_main_age;
    private SQLiteDatabase db;

    private SimpleCursorAdapter simpleCursorAdapter;
    private Cursor cursor;
    private ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化DbHelper
        DbHelper dbHelper=new DbHelper(this,"person.db",null,2);
        //获取SQLiteDataBase对象(类似Hibernate中Session)
        db = dbHelper.getReadableDatabase();
        //获取ListView
        listview = getListView();
        initViews();
        //查询所有
        cursor = db.query(false,"person",null,null,null,null,null,null,null);
        //循环游标
        //把值放入list
        //设置适配器
        //SimpleCursorAdapter
        simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_listview, cursor,new String[]{"_id","name","age"},new int[]{R.id.tv_item_list_id,R.id.tv_item_list_name,R.id.tv_item_list_age});
        listview.setAdapter(simpleCursorAdapter);

        initEvents();//初始化事件


    }

    private void initEvents() {

        //给ListView添加长按事件
        listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                //获取点击的每一行的值
                LinearLayout root= (LinearLayout) view;
               String id=((TextView)root.findViewById(R.id.tv_item_list_id)).getText().toString();
               String name=((TextView)root.findViewById(R.id.tv_item_list_name)).getText().toString();
               String age=((TextView)root.findViewById(R.id.tv_item_list_age)).getText().toString();
                //弹出对话框(自定义)
                final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);

                final AlertDialog dialog=builder.create();

                //设置点击空白,不取消对话框
                dialog.setCancelable(false);


                //解析布局文件
                View v=getLayoutInflater().inflate(R.layout.dialog_listview,null);
                ((TextView)v.findViewById(R.id.tv_dialog_listview_id)).setText("修改:"+id);
                ((EditText)v.findViewById(R.id.et_dialog_listview_name)).setText(name);
                ((EditText)v.findViewById(R.id.et_dialog_listview_age)).setText(age);

                ((Button)v.findViewById(R.id.btn_dialog_listview_sure)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(MainActivity.this, "执行修改操作", Toast.LENGTH_SHORT).show();
                        dialog.dismiss();//关闭当前的对话框
                    }
                });
                ((Button)v.findViewById(R.id.btn_dialog_listview_cancel)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        dialog.dismiss();//关闭当前的对话框
                    }
                });

                dialog.setView(v);
                dialog.show();
                return true;
            }
        });


    }

    private void initViews() {
        et_main_id = (EditText) findViewById(R.id.et_main_id);
        et_main_name = (EditText) findViewById(R.id.et_main_name);
        et_main_age = (EditText) findViewById(R.id.et_main_age);
    }

    public void save(View view){
        String name=et_main_name.getText().toString();
        int age=Integer.parseInt(et_main_age.getText().toString());

        //保存到数据库中
        ContentValues values=new ContentValues();//Map
        values.put("name",name);
        values.put("age",age);
        values.putNull("_id");
        db.insert("person","name",values);
        Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();

        cursor=queryAllPerson(null);
        //通知适配器发生改变
        simpleCursorAdapter.changeCursor(cursor);
    }

    public Cursor queryAllPerson(String name){
        //Cursor cursor=db.query(false,"person",null,null,null,null,null,null,null);
        Cursor cursor;
        if(!"".equals(name)){
            Log.i("test","name="+name);
            cursor=db.rawQuery("select * from person where name like ? limit ?,?",new String[]{"%"+name+"%",2+"",2+""});
        }else{
            Log.i("test","查询所有");
            cursor = db.rawQuery("select * from person",null);
        }
        return cursor;
    }

    public void query(View view){
//        if(!TextUtils.isEmpty(et_main_name.getText())){
            String name=et_main_name.getText().toString();
            cursor=queryAllPerson(name);
            //通知适配器发生改变
            simpleCursorAdapter.changeCursor(cursor);
    }


}


activity_main.xml








/** * 创建表的操作 *@paramsqLiteDatabase*/@Overridepublic voidonCreate(SQLiteDatabase sqLiteDatabase) { Log.i("test","onCreate");//创建表sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,name,age)"); }//数据库版本:低---->高@Overridepublic voidonUpgrade(SQLiteDatabase sqLiteDatabase,inti,inti1) { Log.i("test","onUpgrade"); }}
示例:
1
2
3
4
/** * 创建表的操作 *@paramsqLiteDatabase*/@Overridepublic voidonCreate(SQLiteDatabase sqLiteDatabase) { Log.i("test","onCreate");//创建表sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,name,age)"); }//数据库版本:低---->高@Overridepublic voidonUpgrade(SQLiteDatabase sqLiteDatabase,inti,inti1) { Log.i("test","onUpgrade"); }}
package com.zking.g150825_andorid16_sqlite;

import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.zking.db.DbHelper;

public class MainActivity extends ListActivity {

    private EditText et_main_id;
    private EditText et_main_name;
    private EditText et_main_age;
    private SQLiteDatabase db;

    private SimpleCursorAdapter simpleCursorAdapter;
    private Cursor cursor;
    private ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化DbHelper
        DbHelper dbHelper=new DbHelper(this,"person.db",null,2);
        //获取SQLiteDataBase对象(类似Hibernate中Session)
        db = dbHelper.getReadableDatabase();
        //获取ListView
        listview = getListView();
        initViews();
        //查询所有
        cursor = db.query(false,"person",null,null,null,null,null,null,null);
        //循环游标
        //把值放入list
        //设置适配器
        //SimpleCursorAdapter
        simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_listview, cursor,new String[]{"_id","name","age"},new int[]{R.id.tv_item_list_id,R.id.tv_item_list_name,R.id.tv_item_list_age});
        listview.setAdapter(simpleCursorAdapter);

        initEvents();//初始化事件


    }

    private void initEvents() {

        //给ListView添加长按事件
        listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                //获取点击的每一行的值
                LinearLayout root= (LinearLayout) view;
               String id=((TextView)root.findViewById(R.id.tv_item_list_id)).getText().toString();
               String name=((TextView)root.findViewById(R.id.tv_item_list_name)).getText().toString();
               String age=((TextView)root.findViewById(R.id.tv_item_list_age)).getText().toString();
                //弹出对话框(自定义)
                final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);

                final AlertDialog dialog=builder.create();

                //设置点击空白,不取消对话框
                dialog.setCancelable(false);


                //解析布局文件
                View v=getLayoutInflater().inflate(R.layout.dialog_listview,null);
                ((TextView)v.findViewById(R.id.tv_dialog_listview_id)).setText("修改:"+id);
                ((EditText)v.findViewById(R.id.et_dialog_listview_name)).setText(name);
                ((EditText)v.findViewById(R.id.et_dialog_listview_age)).setText(age);

                ((Button)v.findViewById(R.id.btn_dialog_listview_sure)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(MainActivity.this, "执行修改操作", Toast.LENGTH_SHORT).show();
                        dialog.dismiss();//关闭当前的对话框
                    }
                });
                ((Button)v.findViewById(R.id.btn_dialog_listview_cancel)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        dialog.dismiss();//关闭当前的对话框
                    }
                });

                dialog.setView(v);
                dialog.show();
                return true;
            }
        });


    }

    private void initViews() {
        et_main_id = (EditText) findViewById(R.id.et_main_id);
        et_main_name = (EditText) findViewById(R.id.et_main_name);
        et_main_age = (EditText) findViewById(R.id.et_main_age);
    }

    public void save(View view){
        String name=et_main_name.getText().toString();
        int age=Integer.parseInt(et_main_age.getText().toString());

        //保存到数据库中
        ContentValues values=new ContentValues();//Map
        values.put("name",name);
        values.put("age",age);
        values.putNull("_id");
        db.insert("person","name",values);
        Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();

        cursor=queryAllPerson(null);
        //通知适配器发生改变
        simpleCursorAdapter.changeCursor(cursor);
    }

    public Cursor queryAllPerson(String name){
        //Cursor cursor=db.query(false,"person",null,null,null,null,null,null,null);
        Cursor cursor;
        if(!"".equals(name)){
            Log.i("test","name="+name);
            cursor=db.rawQuery("select * from person where name like ? limit ?,?",new String[]{"%"+name+"%",2+"",2+""});
        }else{
            Log.i("test","查询所有");
            cursor = db.rawQuery("select * from person",null);
        }
        return cursor;
    }

    public void query(View view){
//        if(!TextUtils.isEmpty(et_main_name.getText())){
            String name=et_main_name.getText().toString();
            cursor=queryAllPerson(name);
            //通知适配器发生改变
            simpleCursorAdapter.changeCursor(cursor);
    }


}


1
2
3
4
<!-- android:name是完成ContentProvider类的全称
              android:authorities是和FirstProvidermetaData中的常量AUTHORITY的值一样,否则会报错
          -->
         <provider android:name= "com.bj.FirstContentProvider" android:authorities= "com.bj.firstcontentprovider" ></provider>

  








/** * 创建表的操作 * @param sqLiteDatabase */ @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { Log. i ( "test" , "onCreate" ); //创建表 sqLiteDatabase.execSQL( "create table person(_id integer primary key autoincrement,name,age)" ); } //数据库版本:低---->高 @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { Log. i ( "test" , "onUpgrade" ); }}
示例:
1
2
3
4
/** * 创建表的操作 *@paramsqLiteDatabase*/@Overridepublic voidonCreate(SQLiteDatabase sqLiteDatabase) { Log.i("test","onCreate");//创建表sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,name,age)"); }//数据库版本:低---->高@Overridepublic voidonUpgrade(SQLiteDatabase sqLiteDatabase,inti,inti1) { Log.i("test","onUpgrade"); }}
package com.zking.g150825_andorid16_sqlite;

import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.zking.db.DbHelper;

public class MainActivity extends ListActivity {

    private EditText et_main_id;
    private EditText et_main_name;
    private EditText et_main_age;
    private SQLiteDatabase db;

    private SimpleCursorAdapter simpleCursorAdapter;
    private Cursor cursor;
    private ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化DbHelper
        DbHelper dbHelper=new DbHelper(this,"person.db",null,2);
        //获取SQLiteDataBase对象(类似Hibernate中Session)
        db = dbHelper.getReadableDatabase();
        //获取ListView
        listview = getListView();
        initViews();
        //查询所有
        cursor = db.query(false,"person",null,null,null,null,null,null,null);
        //循环游标
        //把值放入list
        //设置适配器
        //SimpleCursorAdapter
        simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_listview, cursor,new String[]{"_id","name","age"},new int[]{R.id.tv_item_list_id,R.id.tv_item_list_name,R.id.tv_item_list_age});
        listview.setAdapter(simpleCursorAdapter);

        initEvents();//初始化事件


    }

    private void initEvents() {

        //给ListView添加长按事件
        listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                //获取点击的每一行的值
                LinearLayout root= (LinearLayout) view;
               String id=((TextView)root.findViewById(R.id.tv_item_list_id)).getText().toString();
               String name=((TextView)root.findViewById(R.id.tv_item_list_name)).getText().toString();
               String age=((TextView)root.findViewById(R.id.tv_item_list_age)).getText().toString();
                //弹出对话框(自定义)
                final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);

                final AlertDialog dialog=builder.create();

                //设置点击空白,不取消对话框
                dialog.setCancelable(false);


                //解析布局文件
                View v=getLayoutInflater().inflate(R.layout.dialog_listview,null);
                ((TextView)v.findViewById(R.id.tv_dialog_listview_id)).setText("修改:"+id);
                ((EditText)v.findViewById(R.id.et_dialog_listview_name)).setText(name);
                ((EditText)v.findViewById(R.id.et_dialog_listview_age)).setText(age);

                ((Button)v.findViewById(R.id.btn_dialog_listview_sure)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(MainActivity.this, "执行修改操作", Toast.LENGTH_SHORT).show();
                        dialog.dismiss();//关闭当前的对话框
                    }
                });
                ((Button)v.findViewById(R.id.btn_dialog_listview_cancel)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        dialog.dismiss();//关闭当前的对话框
                    }
                });

                dialog.setView(v);
                dialog.show();
                return true;
            }
        });


    }

    private void initViews() {
        et_main_id = (EditText) findViewById(R.id.et_main_id);
        et_main_name = (EditText) findViewById(R.id.et_main_name);
        et_main_age = (EditText) findViewById(R.id.et_main_age);
    }

    public void save(View view){
        String name=et_main_name.getText().toString();
        int age=Integer.parseInt(et_main_age.getText().toString());

        //保存到数据库中
        ContentValues values=new ContentValues();//Map
        values.put("name",name);
        values.put("age",age);
        values.putNull("_id");
        db.insert("person","name",values);
        Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();

        cursor=queryAllPerson(null);
        //通知适配器发生改变
        simpleCursorAdapter.changeCursor(cursor);
    }

    public Cursor queryAllPerson(String name){
        //Cursor cursor=db.query(false,"person",null,null,null,null,null,null,null);
        Cursor cursor;
        if(!"".equals(name)){
            Log.i("test","name="+name);
            cursor=db.rawQuery("select * from person where name like ? limit ?,?",new String[]{"%"+name+"%",2+"",2+""});
        }else{
            Log.i("test","查询所有");
            cursor = db.rawQuery("select * from person",null);
        }
        return cursor;
    }

    public void query(View view){
//        if(!TextUtils.isEmpty(et_main_name.getText())){
            String name=et_main_name.getText().toString();
            cursor=queryAllPerson(name);
            //通知适配器发生改变
            simpleCursorAdapter.changeCursor(cursor);
    }


}

activity_main.xml

?
1
2
3
4
package com.zking.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * Created by Administrator on 2016/12/14. */ public class DbHelper extends SQLiteOpenHelper { /** * @param context 上下文 * @param name 数据库名字(文件名) * @param factory 数据库工厂(null) * @param version 数据库版本 */ public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super (context, name, factory, version); Log. i ( "test" , "构造方法" ); }









/** * 创建表的操作 * @param sqLiteDatabase */ @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { Log. i ( "test" , "onCreate" ); //创建表 sqLiteDatabase.execSQL( "create table person(_id integer primary key autoincrement,name,age)" ); } //数据库版本:低---->高 @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { Log. i ( "test" , "onUpgrade" ); }}
示例:
1
2
3
4
/** * 创建表的操作 *@paramsqLiteDatabase*/@Overridepublic voidonCreate(SQLiteDatabase sqLiteDatabase) { Log.i("test","onCreate");//创建表sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,name,age)"); }//数据库版本:低---->高@Overridepublic voidonUpgrade(SQLiteDatabase sqLiteDatabase,inti,inti1) { Log.i("test","onUpgrade"); }}
package com.zking.g150825_andorid16_sqlite;

import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.zking.db.DbHelper;

public class MainActivity extends ListActivity {

    private EditText et_main_id;
    private EditText et_main_name;
    private EditText et_main_age;
    private SQLiteDatabase db;

    private SimpleCursorAdapter simpleCursorAdapter;
    private Cursor cursor;
    private ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化DbHelper
        DbHelper dbHelper=new DbHelper(this,"person.db",null,2);
        //获取SQLiteDataBase对象(类似Hibernate中Session)
        db = dbHelper.getReadableDatabase();
        //获取ListView
        listview = getListView();
        initViews();
        //查询所有
        cursor = db.query(false,"person",null,null,null,null,null,null,null);
        //循环游标
        //把值放入list
        //设置适配器
        //SimpleCursorAdapter
        simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_listview, cursor,new String[]{"_id","name","age"},new int[]{R.id.tv_item_list_id,R.id.tv_item_list_name,R.id.tv_item_list_age});
        listview.setAdapter(simpleCursorAdapter);

        initEvents();//初始化事件


    }

    private void initEvents() {

        //给ListView添加长按事件
        listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                //获取点击的每一行的值
                LinearLayout root= (LinearLayout) view;
               String id=((TextView)root.findViewById(R.id.tv_item_list_id)).getText().toString();
               String name=((TextView)root.findViewById(R.id.tv_item_list_name)).getText().toString();
               String age=((TextView)root.findViewById(R.id.tv_item_list_age)).getText().toString();
                //弹出对话框(自定义)
                final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);

                final AlertDialog dialog=builder.create();

                //设置点击空白,不取消对话框
                dialog.setCancelable(false);


                //解析布局文件
                View v=getLayoutInflater().inflate(R.layout.dialog_listview,null);
                ((TextView)v.findViewById(R.id.tv_dialog_listview_id)).setText("修改:"+id);
                ((EditText)v.findViewById(R.id.et_dialog_listview_name)).setText(name);
                ((EditText)v.findViewById(R.id.et_dialog_listview_age)).setText(age);

                ((Button)v.findViewById(R.id.btn_dialog_listview_sure)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(MainActivity.this, "执行修改操作", Toast.LENGTH_SHORT).show();
                        dialog.dismiss();//关闭当前的对话框
                    }
                });
                ((Button)v.findViewById(R.id.btn_dialog_listview_cancel)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        dialog.dismiss();//关闭当前的对话框
                    }
                });

                dialog.setView(v);
                dialog.show();
                return true;
            }
        });


    }

    private void initViews() {
        et_main_id = (EditText) findViewById(R.id.et_main_id);
        et_main_name = (EditText) findViewById(R.id.et_main_name);
        et_main_age = (EditText) findViewById(R.id.et_main_age);
    }

    public void save(View view){
        String name=et_main_name.getText().toString();
        int age=Integer.parseInt(et_main_age.getText().toString());

        //保存到数据库中
        ContentValues values=new ContentValues();//Map
        values.put("name",name);
        values.put("age",age);
        values.putNull("_id");
        db.insert("person","name",values);
        Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();

        cursor=queryAllPerson(null);
        //通知适配器发生改变
        simpleCursorAdapter.changeCursor(cursor);
    }

    public Cursor queryAllPerson(String name){
        //Cursor cursor=db.query(false,"person",null,null,null,null,null,null,null);
        Cursor cursor;
        if(!"".equals(name)){
            Log.i("test","name="+name);
            cursor=db.rawQuery("select * from person where name like ? limit ?,?",new String[]{"%"+name+"%",2+"",2+""});
        }else{
            Log.i("test","查询所有");
            cursor = db.rawQuery("select * from person",null);
        }
        return cursor;
    }

    public void query(View view){
//        if(!TextUtils.isEmpty(et_main_name.getText())){
            String name=et_main_name.getText().toString();
            cursor=queryAllPerson(name);
            //通知适配器发生改变
            simpleCursorAdapter.changeCursor(cursor);
    }


}


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    tools:context="zking.com.g150825_andriod24.MainActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/edit_query1"
        android:hint="请输入内容"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="查询"
        android:id="@+id/edit_query2"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入姓名"
        android:id="@+id/addname"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入年龄"
        android:id="@+id/addage"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="增加"
        android:id="@+id/ad"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入要修ID"
        android:id="@+id/updateid"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入姓名"
        android:id="@+id/updatename"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入年龄"
        android:id="@+id/updateage"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="修改"
        android:id="@+id/update"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入要删除的ID"
        android:id="@+id/deleteid"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="删除"
        android:id="@+id/delete"
        />
</LinearLayout>






示例:
1
2
3
4
/** * 创建表的操作 *@paramsqLiteDatabase*/@Overridepublic voidonCreate(SQLiteDatabase sqLiteDatabase) { Log.i("test","onCreate");//创建表sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,name,age)"); }//数据库版本:低---->高@Overridepublic voidonUpgrade(SQLiteDatabase sqLiteDatabase,inti,inti1) { Log.i("test","onUpgrade"); }}
package com.zking.g150825_andorid16_sqlite;

import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.zking.db.DbHelper;

public class MainActivity extends ListActivity {

    private EditText et_main_id;
    private EditText et_main_name;
    private EditText et_main_age;
    private SQLiteDatabase db;

    private SimpleCursorAdapter simpleCursorAdapter;
    private Cursor cursor;
    private ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化DbHelper
        DbHelper dbHelper=new DbHelper(this,"person.db",null,2);
        //获取SQLiteDataBase对象(类似Hibernate中Session)
        db = dbHelper.getReadableDatabase();
        //获取ListView
        listview = getListView();
        initViews();
        //查询所有
        cursor = db.query(false,"person",null,null,null,null,null,null,null);
        //循环游标
        //把值放入list
        //设置适配器
        //SimpleCursorAdapter
        simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_listview, cursor,new String[]{"_id","name","age"},new int[]{R.id.tv_item_list_id,R.id.tv_item_list_name,R.id.tv_item_list_age});
        listview.setAdapter(simpleCursorAdapter);

        initEvents();//初始化事件


    }

    private void initEvents() {

        //给ListView添加长按事件
        listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                //获取点击的每一行的值
                LinearLayout root= (LinearLayout) view;
               String id=((TextView)root.findViewById(R.id.tv_item_list_id)).getText().toString();
               String name=((TextView)root.findViewById(R.id.tv_item_list_name)).getText().toString();
               String age=((TextView)root.findViewById(R.id.tv_item_list_age)).getText().toString();
                //弹出对话框(自定义)
                final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);

                final AlertDialog dialog=builder.create();

                //设置点击空白,不取消对话框
                dialog.setCancelable(false);


                //解析布局文件
                View v=getLayoutInflater().inflate(R.layout.dialog_listview,null);
                ((TextView)v.findViewById(R.id.tv_dialog_listview_id)).setText("修改:"+id);
                ((EditText)v.findViewById(R.id.et_dialog_listview_name)).setText(name);
                ((EditText)v.findViewById(R.id.et_dialog_listview_age)).setText(age);

                ((Button)v.findViewById(R.id.btn_dialog_listview_sure)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(MainActivity.this, "执行修改操作", Toast.LENGTH_SHORT).show();
                        dialog.dismiss();//关闭当前的对话框
                    }
                });
                ((Button)v.findViewById(R.id.btn_dialog_listview_cancel)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        dialog.dismiss();//关闭当前的对话框
                    }
                });

                dialog.setView(v);
                dialog.show();
                return true;
            }
        });


    }

    private void initViews() {
        et_main_id = (EditText) findViewById(R.id.et_main_id);
        et_main_name = (EditText) findViewById(R.id.et_main_name);
        et_main_age = (EditText) findViewById(R.id.et_main_age);
    }

    public void save(View view){
        String name=et_main_name.getText().toString();
        int age=Integer.parseInt(et_main_age.getText().toString());

        //保存到数据库中
        ContentValues values=new ContentValues();//Map
        values.put("name",name);
        values.put("age",age);
        values.putNull("_id");
        db.insert("person","name",values);
        Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();

        cursor=queryAllPerson(null);
        //通知适配器发生改变
        simpleCursorAdapter.changeCursor(cursor);
    }

    public Cursor queryAllPerson(String name){
        //Cursor cursor=db.query(false,"person",null,null,null,null,null,null,null);
        Cursor cursor;
        if(!"".equals(name)){
            Log.i("test","name="+name);
            cursor=db.rawQuery("select * from person where name like ? limit ?,?",new String[]{"%"+name+"%",2+"",2+""});
        }else{
            Log.i("test","查询所有");
            cursor = db.rawQuery("select * from person",null);
        }
        return cursor;
    }

    public void query(View view){
//        if(!TextUtils.isEmpty(et_main_name.getText())){
            String name=et_main_name.getText().toString();
            cursor=queryAllPerson(name);
            //通知适配器发生改变
            simpleCursorAdapter.changeCursor(cursor);
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值