繁体   English   中英

需要在Jersey REST服务中使用SQLiteOpenHelper,但是我无法传递所需的Android上下文

[英]Need to use SQLiteOpenHelper in a Jersey REST service but I cannot pass required Android context

我正在尝试用数据库中的数据替换内存中的数据,这将是REST API中使用的数据。 该API是在Android机器上运行的服务。 为了使用SQLiteOpenHelper,我必须将Context传递给扩展它的类。 不幸的是,处理REST API的线程并未实例化我可以传递Context的类,而是将API配置为:

public static void createServer(){
    new Thread(new Runnable() {
        @Override
        public void run() {
            URI baseUri = UriBuilder.fromUri("http://localhost/").port(8080).build();
            ResourceConfig config = new ResourceConfig(ThingResource.class);
            config.register(GsonMessageBodyHandler.class);
            config.register(AndroidFriendlyFeature.class);
            JettyHttpContainerFactory.createServer(baseUri, config);
        }
    }).start();
}

这是需要使用Context的类:

public class DbHelper extends SQLiteOpenHelper {
    private final String DB_NAME = DatabaseContract.DATABASE_NAME;
    private SQLiteDatabase db;

    public DbHelper(Context context) {
        super(context, DatabaseContract.DATABASE_NAME, null, DatabaseContract.DATABASE_VERSION);
    }

    //rest of class handles db methods
}

这是调用createServer()位置:

public class RoomStatus extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        JerseyBootstrap.createServer();
        //rest of method/class set up main screen
    }
}

如何将Context传递给REST服务,以便可以使用DbHelper或使用其他方法从SQLite数据库获取数据?

你为什么不试试这个:

public static void createServer(Context context){
    new Thread(new Runnable() {
        @Override
        public void run() {
            URI baseUri = UriBuilder.fromUri("http://localhost/").port(8080).build();
            ResourceConfig config = new ResourceConfig(ThingResource.class);
            config.register(GsonMessageBodyHandler.class);
            config.register(AndroidFriendlyFeature.class);
            JettyHttpContainerFactory.createServer(baseUri, config);
        }
    }).start();
}

并这样称呼:

public class RoomStatus extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        JerseyBootstrap.createServer(this);
        //rest of method/class set up main screen
    }
}

由于ThingResource是静态类,因此我仅从主要活动中设置上下文。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM