no9*_*no9 10 sqlite android android-context
我已经按照本教程在我的Android应用程序中使用SQLite数据库.由于我是初学者,我在理解示例中使用的"context"参数时遇到了问题.
我想调用适配器并插入/更新/删除不扩展活动的类中的记录,在此示例中代表上下文.
现在我不知道在适配器中传递什么作为上下文,因为我没有从活动中调用适配器.
有人可以解释一下吗?
你可以想象上下文定义了sqlite数据库存在的WHERE/WHEN.sqlite数据库本身不存在,它们存在于您的活动范围内,因此存在于您的活动的上下文中.
对于接下来的步骤,你必须明白上下文是一个动态的"事物"(在reallife中,你可以把它想象成某人在这里和现在).上下文是活动及其时刻的个体,就像你现在和现在只属于你和你的一样,随着时间而变化.
如果你从你的活动中调用一个类,那么这就行了(从活动本身传递活动的上下文就可以了 - 就像你对你的好友说的那样:这就是我现在感觉如何).
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Context contextNew = this;
myClass(contextNew);
Run Code Online (Sandbox Code Playgroud)
一个简单的解决方案(panacea)将在MyActivity中创建一个静态的Context变量(contextVariable),并直接从不通过:MyActivity.contextVariable访问它.但这不起作用,因为当您尝试声明/使用静态Context变量时会出现错误.
因此,如果您计划在未在主要活动中调用的服务中使用sqlite,例如,由广播接收器触发的服务(服务和接收者本身都没有上下文),那么您必须从所述接收器内访问原始应用程序的上下文.
访问原始活动的上下文很简单,但并不明显.
这适用于我(thanx @ZiGi和@Cristian):
import android.app.Service;
import android.content.Context;
public class BatchUploadGpsData extends Service {
public Context contextNew;
@Override
public void onCreate() {
contextNew = getApplicationContext();
Run Code Online (Sandbox Code Playgroud)
这是每次Android设备连接到WIFI网络时将导航数据上传到Web上的数据库的工作代码的示例.我有一个接收器监听连接变化(作为一个单独的类直接从"Manifest文件"中调用).
我希望这是有道理的,如果你想了解更多细节,请查看 我的这篇文章,其中我有所述接收器的完整(准系统)代码.
| 归档时间: |
|
| 查看次数: |
20111 次 |
| 最近记录: |