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

标签 java android rest jersey android-sqlite

我正在尝试用数据库中的数据替换内存中的数据,这将是 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
    }
}

关于java - 需要在 Jersey REST 服务中使用 SQLiteOpenHelper 但我无法传递所需的 Android 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42790147/

相关文章:

java - 如何使用Java Midi STOP

java - 使用 RadioButton 上的 OnCheckedChangeListener 反向显示/隐藏布局

android - ListView 在 ScrollView 中的滚动功能

android - 如何使用相机作为 Facebook Android Webview 中文件输入的来源

java - 在java中并行化任务的最简单方法是什么?

android - 跨 Activity 访问用户信息 Firebase Android

javascript - 如何使用 REST api 删除带有 angularjs 的集合?

wordpress - WooCommerce Rest API 按 slug 获取产品

php - osticket,通过 REST API 创建票证

java - Linux Gurobi LD_LIBRARY_PATH不满意的链接错误AWS