安卓:AsyncTaskLoader及时获取数据库中数据,点菜单转另一个APP操作数据
2015-09-21 21:11
543 查看
异步loader项目的结果图:
加权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
异步Loader类的主逻辑代码文件:
主布局文件:
适配器布局文件:
跳转到的操作数据的APP:
跳转后见到的页面:
清单文件中:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<activity
android:name=".SecondActivity">
<intent-filter>
<action android:name="hh.pp.day"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
建项目时第一个页面不需要动,再建一个类和布局:
第二个类逻辑代码文件:
第二个类的布局文件:
加权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
异步Loader类的主逻辑代码文件:
<span style="font-size:18px;">package com.example.day17_aysnctaskloader; import java.io.File; import android.annotation.SuppressLint; import android.app.Activity; import android.app.LoaderManager; import android.app.LoaderManager.LoaderCallbacks; import android.content.AsyncTaskLoader; import android.content.Context; import android.content.Intent; import android.content.Loader; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.os.Environment; import android.support.v4.widget.SimpleCursorAdapter; import android.view.Menu; import android.view.MenuItem; import android.widget.ListView; import android.widget.TextView; @SuppressLint("NewApi") public class MainActivity extends Activity implements LoaderCallbacks<Cursor>{ ListView lv; TextView tv_show; LoaderManager manager; SimpleCursorAdapter adapter; static SQLiteDatabase db; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv=(ListView) findViewById(R.id.lv); tv_show=(TextView) findViewById(R.id.tv_show); manager=getLoaderManager(); manager.initLoader(1, null, this); String path=Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"Download"+File.separator+"info.db"; db=SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE); adapter=new SimpleCursorAdapter(getApplicationContext(), R.layout.item, null, new String[]{"_id","name"},new int[]{R.id.m_id,R.id.m_name},SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); lv.setAdapter(adapter); lv.setEmptyView(tv_show); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.operation: Intent intent=new Intent(); intent.setAction("hh.pp.day"); startActivity(intent); break; } return super.onOptionsItemSelected(item); } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { MyLoader loader=new MyLoader(MainActivity.this); return loader; } @Override public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) { adapter.swapCursor(arg1); } @Override public void onLoaderReset(Loader<Cursor> arg0) { adapter.swapCursor(null); } //自定义loader @SuppressLint("NewApi") public static class MyLoader extends AsyncTaskLoader<Cursor> { @SuppressLint("NewApi") public MyLoader(Context context) { super(context); // TODO Auto-generated constructor stub } //当创建完毕 加载数据的方法,启动加载 @SuppressLint("NewApi") @Override protected void onStartLoading() { super.onStartLoading(); //必须加,强制向下执行 强制加载异步数据,否则不向下执行 forceLoad(); } //开启后台,做耗时操作 @Override public Cursor loadInBackground() { Cursor c=db.rawQuery("select * from person", null); return c; } //执行完成loadInBackground之后调用,接受loadInBackground返回的数据 @Override public void deliverResult(Cursor data) { // TODO Auto-generated method stub super.deliverResult(data); } } } </span>
主布局文件:
<span style="font-size:18px;"><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=".MainActivity" > <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"/> <TextView android:id="@+id/tv_show" android:layout_width="match_parent" android:layout_height="match_parent" android:text="暂无数据" android:gravity="center" android:textColor="#00ff00"/> </RelativeLayout> </span>
适配器布局文件:
<span style="font-size:18px;"><?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="horizontal" > <TextView android:id="@+id/m_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#0000ff" android:textSize="18sp" android:layout_margin="10dp"/> <TextView android:id="@+id/m_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#0000ff" android:textSize="18sp" android:layout_margin="10dp"/> </LinearLayout> </span>
跳转到的操作数据的APP:
跳转后见到的页面:
清单文件中:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<activity
android:name=".SecondActivity">
<intent-filter>
<action android:name="hh.pp.day"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
建项目时第一个页面不需要动,再建一个类和布局:
第二个类逻辑代码文件:
package com.day17_lijieatloaderdb; import java.io.File; import android.app.Activity; import android.content.ContentValues; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.EditText; public class SecondActivity extends Activity { EditText et_id,et_name; SQLiteDatabase db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_activity); et_id=(EditText) findViewById(R.id.et_id); et_name=(EditText) findViewById(R.id.et_name); String path=Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"Download"+File.separator+"info.db"; db=SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE); } public void click(View v) { switch(v.getId()) { case R.id.bt_add: String id=et_id.getText().toString(); String name=et_name.getText().toString(); ContentValues values=new ContentValues(); values.put("_id",Integer.parseInt(id)); values.put("name",name); db.insert("person", null, values); finish(); break; case R.id.bt_update: String id2=et_id.getText().toString(); String name2=et_name.getText().toString(); ContentValues values2=new ContentValues(); values2.put("name",name2); db.update("person", values2, "_id=?", new String[]{id2}); finish(); break; case R.id.bt_delete: String id3=et_id.getText().toString(); db.delete("person", "_id=?", new String[]{id3}); finish(); break; } } }
第二个类的布局文件:
<?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" > <EditText android:id="@+id/et_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入id"/> <EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入name"/> <Button android:id="@+id/bt_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="添加数据" android:onClick="click"/> <Button android:id="@+id/bt_update" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="更新数据" android:onClick="click"/> <Button android:id="@+id/bt_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除数据" android:onClick="click"/> </LinearLayout>
相关文章推荐
- Android AlertDialog对话框 学习笔记
- Android Studio 导出 APK
- IOS几种常见的实现扫描、生成二维码的方式(一、使用ZBar SDK)
- Android与服务器交互
- Android Toast 学习笔记
- Android学习之自定义控件
- Android学习进阶路线导航线路(Android源码分享) ...
- Objective-C入门12:字符串
- Android 之Adapter
- Android Studio导出的密钥签名市场认证安装包
- Unity3d开发(一)ShaderLab 入门 语法格式
- cocos2d-x 3.2 2048——第六部分(最后一章)
- android 读取sd卡中的图片
- android studio 导入高德地图 INSTALL_FAILED_CPU_ABI_INCOMPATIBLE错误
- Android内存管理之SoftReference
- Android(java)学习笔记261:JNI之编写jni程序适配所有处理器型号
- 高效地输出移动APP产品原型,有哪些方法,要注意哪些?
- Objective-C-----用NSArray显示一年中所有的月份
- 【IOS 开发学习总结-OC-13】★★objective-c面向对象之——KVC(键值编码)
- IOS开发测试之单元测试中的理论知识