android开发 修改了数据库后怎么更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android开发 修改了数据库后怎么更新相关的知识,希望对你有一定的参考价值。
我创建了一个学生表,做了两个Activity ,一个查看学生信息,一个修改学生信息,先打开查看的Activity,看到了其中的学生信息,然后去修改Activity修改学生信息,再去查看Activity看学生信息发现数据没有变化,请问怎么让数据随着修改而改变
给你提供几种方法吧:
在查看学生信息的那个Activity里面,重写onResume方法,在这个方法里面获取数据来显示视图,无论是这个activity新创建,还是从后台不可见转为前台,都会走这个生命周期。
数据显示页面监听数据的变化来更新输入。如果管理数据使用的是 ContentProvider管理的话,直接使用ContentObserver来监听相应的Uri即可,如果不是这种方式的话,可以在操作学生数据库的时候发送一个广播,然后现实学生页面的Activity去监听这个广播,收到广播后去更新界面。
如果是从查看信息界面进入的修改信息界面,那么可以使用startActivityForResult方法启动信息修改界面,信息修改后调用setResult方法返回修改后的数据给信息显示界面,信息显示界面重写onActivityResult方法来获取新的学生信息,从而更新界面
暂时就想到这几种方法吧,希望对你有帮助~
使用监听者模式,监听数据库的变化,然后改变取值。
private void registerObserver()getContentResolver().registerContentObserver(
ContactsContract.Contacts.CONTENT_URI, true, mObserver);
getContentResolver().registerContentObserver(
CallLog.Calls.CONTENT_URI, true, mObserver);
private void unregisterObserver()
getContentResolver().unregisterContentObserver(mObserver);
private ContentObserver mObserver = new ContentObserver(new Handler())
@Override
public void onChange(boolean selfChange)
isContactChanged = true;
; 参考技术B 可以使用更新数据库的语句。
SQLiteDatabase.update(String table,ContenValues values,String whereClausee,String[] whereArgs)追问
我就是用了update语句把数据库给改的,改了以后去看学生信息没有变化啊!!
追答是不是语句出现了问题,再好好看一下
追问是不是跟Activity的生命周期有关?感觉重新打开查看Activity应该是onRestart(),但加入了查询语句还是没变化!!
React native run-android 不更新修改后的代码
【中文标题】React native run-android 不更新修改后的代码【英文标题】:React native run-android do not updating modified code 【发布时间】:2018-06-26 12:16:39 【问题描述】:我在我的 Windows PC 上使用 React native 0.52.0 和 react-native-cli 2.0.1 进行 android 开发。尽管我做了所有的改变。当我运行react-native run-android
时,它会成功构建,但是当我运行它时,我会得到默认的反应原生屏幕。
我运行react-native run-android
时的结果@-
我得到的应用程序-
index.js
import AppRegistry from 'react-native';
import App from './App';
AppRegistry.registerComponent('albums', () => App);
app.js
import React from 'react'
import ReactNative, Text from 'react-native'
export default const App = () =>
return (
<Text>Hello World</Text>
)
当我运行react-native init albums
时,它只是创建了一个 index.js 文件,没有 index.android.js 或 index.ios.js 文件
我做错了什么?
【问题讨论】:
How to create a Minimal, Complete, and Verifiable example 我觉得你需要研究一下。 ***.com/questions/36933287/… 【参考方案1】:假设您在正确的文件夹中,请尝试这样做:
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
如果您有 index.android.js,请改为:
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
然后执行 react-native run-android。
【讨论】:
我按照你说的做了,这是我收到的错误消息 FAILURE: Build failed with an exception。 * 出了什么问题:配置根项目“专辑”时出现问题。 > 无法解析配置 ':classpath' 的所有文件。 > 找不到 com.android.tools.build:gradle:3.0.1。在以下位置搜索:jcenter.bintray.com/com/android/tools/build/gradle/3.0.1/gradle -3.0.1.pom jcenter.bintray.com/com/android/tools/build/gradle/3.0.1/gradle -3.0.1.jar 要求:项目: 运行后,你说的第一行代码,我的Build is failed 确保命令中的路径与项目中的路径相同。 不,你不应该。 就我而言,它需要每次都运行。谁有解决方案?【参考方案2】:解决方案
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
输出将是:
`c:\Users\lenger\Desktop\webrowser>react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
Scanning folders for symlinks in c:\Users\lenger\Desktop\webrowser\node_modules (43ms)
Scanning folders for symlinks in c:\Users\lenger\Desktop\webrowser\node_modules (38ms)
Loading dependency graph, done.
bundle: start
bundle: finish
bundle: Writing bundle output to: android/app/src/main/assets/index.android.bundle
bundle: Done writing bundle output
之后
再次运行react-native run-android
,你会发现你的修改工作。
https://lengerrong.blogspot.am/2018/01/react-native-run-android-do-not.html
【讨论】:
好像每次编译前都要运行这个命令? @fujianjin6471 你有解决办法吗?还是我每次都需要跑? @BhaveshHirpara 到现在是 谢谢+1。目前我在 iOS 中运行,在开发结束时我只是在 android 中测试,这样我就可以避免多次执行命令【参考方案3】:这对我有用。 第 1 步)
rm -rf /usr/local/var/run/watchman && brew uninstall watchman && brew install watchman
第二步)
react-native start
【讨论】:
【参考方案4】:您可能更新了错误的文件,而不是在 AppRegistry 类中调用它。
检查(或发布)您的完整 index.android.js 并确保它正在调用和导入的文件是您实际修改的文件。
【讨论】:
【参考方案5】:在您的终端窗口中转到您的项目文件夹,然后尝试此命令
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
【讨论】:
【参考方案6】:打开 package.json 文件并更新此代码。
"scripts":
"android": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && react-native run-android",
"ios": "react-native run-ios"
,
假设您在正确的文件夹中,请尝试这样做:
仅运行此命令,它会自动执行这两个命令。
npm run android
【讨论】:
每次应用运行时都不好【参考方案7】:运行脚本:
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
之后,只需执行以下操作:
$ gradlew clean
$ react-native link
【讨论】:
【参考方案8】:这对我有用:
在你的项目文件夹中运行这个
c:\Users\lenger\Desktop\YourProjectFolder>react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
在 c: 中扫描符号链接的文件夹
\Users\lenger\Desktop\webrowser\node_modules (43ms)
Scanning folders for symlinks in c:\Users\lenger\Desktop\webrowser\node_modules (38ms)
Loading dependency graph, done.
bundle: start
bundle: finish
bundle: Writing bundle output to: android/app/src/main/assets/index.android.bundle
bundle: Done writing bundle output
再次运行 react-native run-android
我分享了找到此解决方案的链接: https://lengerrong.blogspot.com/2018/01/react-native-run-android-do-not.html
【讨论】:
但是,我需要在运行时每次都编写 bundle 吗?【参考方案9】:github 上的 comment 解决了我的问题。
@neonsec Cool, it do works !
and I find a reason why this happened
https://github.com/facebook/watchman/blob/4b98623e8fde17588f27494f3ae8f084b9b227d3/QueryableView.cpp#L48
it looks like when a .git/index.lock or a .hg/wlock file exist, watchman will do nothing
解决方法:删除.git/index.lock
文件
## root app dir
rm -f .git/index.lock
其他链接: https://github.com/facebook/watchman/blob/4b98623e8fde17588f27494f3ae8f084b9b227d3/QueryableView.cpp#L48
【讨论】:
【参考方案10】:对于 CodePush 用户
我遇到了同样的问题,但它并没有在生产版本中更新我的代码,它在开发中运行良好。
我的问题是 CodePush,它正在更新我的应用程序,因为它与上一个 CodePush 发布目标版本具有相同的版本,并且是强制更新(我没有更改版本目标,因为它只是为了测试目的),然后,我在我的 App.js 上注释了 CodePush 代码,它运行良好。
【讨论】:
【参考方案11】:尝试@SmoggeR_js 回答后,如果您遇到同样的问题,请尝试以下操作 (假设您已创建密钥并已签署 apk)
-
删除
build
文件夹内的android/app
文件夹
删除build
在android
文件夹内
运行rm -rf $HOME/.gradle/caches/
删除缓存
打开build.gradle
--> android/app/build.gradle
注释掉这一行
apply from: "../../node_modules/react-native/react.gradle"
从assets
文件夹( android/app/src/main/assets/index.android.bundle)
中删除index.android.bundle
文件
运行以下命令react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
react-native run-android --variant=release
(您必须生成签名密钥,并且所有密钥都应在 gradle 文件 ref (https://s-pace.github.io/react-native/docs/signed-apk-android.html) 中更新
【讨论】:
【参考方案12】:在我的情况下,删除 gradle.properties 中的以下行解决了它。
org.gradle.configureondemand = true
【讨论】:
【参考方案13】:对我来说,问题是我已经从我的 AndroidManifest.xml 中删除了互联网权限(因为从技术上讲不需要它)。 React Native 使用该权限将您的应用连接到开发机器(并启用实时调试)。
<uses-permission android:name="android.permission.INTERNET" />
【讨论】:
【参考方案14】:打开你的Android Studio -> “Tools”菜单 -> “AVD manager”并右键点击你正在使用的模拟器,选择“Wipe Data" 然后 "Cold Boot Now" 应该可以解决问题。
【讨论】:
【参考方案15】:如果您使用的是 index.android.js,请按照以下步骤操作:
删除 android/app/src/main/assets 中的 index.android.bundle,然后 -
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android。 bundle --assets-dest android/app/src/main/res/
cd ./android
./gradlew assembleRelease -x bundleReleaseJsAndAssets
【讨论】:
【参考方案16】:三步修复:
-
启用实时重新加载
禁用热重载
在开发设置中,取消选中 JS 开发模式
现在您的应用会在您每次更改代码时自动更新。
【讨论】:
我认为这是一个错误,忘记了每次克隆到新系统时都需要重新启用实时重载和热重载【参考方案17】:试试这个
cd .git (in your react-native folder)
rm index.lock
并重新启动 Metro bundler,即react-native start
哇哇!!...
【讨论】:
【参考方案18】:没有 index.android.js 或 index.ios.js 文件
在这种情况下,您必须按照以下手机/模拟器上的说明进行操作:
保存App.js
后,记得输入两次R
大写
要使其自动更改,请在 Android 模拟器上按 CTRL + M
(MacOS 上为 CMD + M
)或摇动正在运行的应用程序的 Android 设备并选择 Hot reloading
(保持当前状态,仅更改您已更改的文件) 或Live reloading
(重新加载整个应用程序)。
【讨论】:
【参考方案19】:我犯了一个愚蠢的错误,即不保存对 App.js 的编辑。保存数据后会反映:)
【讨论】:
嗨,目前的答案看起来更像评论,当你有 50 次以上的代表时,你就可以添加评论了。【参考方案20】:就我而言,当我禁用调试时,它会更新。 所以这是我的解决方案。
在 Chrome 开发工具中 > 网络 > 禁用缓存 希望 shell 对你有用
【讨论】:
【参考方案21】:如果您使用“codepush”。
我现在尝试了两个小时来弄清楚为什么我的 Android 版本总是回滚到旧代码并且不显示新功能。
原因是旧的 CodePush 导致应用降级。
【讨论】:
【参考方案22】:尝试删除
./android/.idea 文件夹。 ./android/.gradle 文件夹。它对我有用
【讨论】:
【参考方案23】:在你的项目目录下,有 package.json 文件。您可以在脚本下的该 json 文件中添加以下代码 sn-p:。之后,您可以使用npm run android-windows
一个命令运行应用程序。要正常工作,您应该添加以下代码脚本。
"android-windows": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && react-native run-android"
【讨论】:
我们是否必须每次运行才能看到代码的修改?以上是关于android开发 修改了数据库后怎么更新的主要内容,如果未能解决你的问题,请参考以下文章
React native run-android 不更新修改后的代码
Android 天气APP(三十六)运行到本地AS更新项目版本依赖去掉ButterKnife