如何从 Android 调用 RESTful Web 服务?

2023-12-05

我使用 Jersey Framework 和 Java 在 Netbean IDE 中编写了一个 REST Web 服务。

对于用户需要提供用户名和密码的每个请求,我知道这种身份验证不是最佳实践(使用如下的curl命令:curl -u username:password -X PUT http://localhsot:8080/user).

现在我想从 Android 类调用 REST Web 服务。

我该怎么做呢?

我有一个 Android 类,它使用DefaultHttpClient and CredentialUsernameAndPassword,但是当我在Eclipse中运行它时,有时会出现运行时异常或SDK异常。


这是一个示例 Restclient 类

public class RestClient
{
    public enum RequestMethod
    {
        GET,
        POST
    }
    public int responseCode=0;
    public String message;
    public String response;
    public void Execute(RequestMethod method,String url,ArrayList<NameValuePair> headers,ArrayList<NameValuePair> params) throws Exception
    {
        switch (method)
        {
            case GET:
            {
                // add parameters
                String combinedParams = "";
                if (params!=null)
                {
                    combinedParams += "?";
                    for (NameValuePair p : params)
                    {
                        String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),"UTF-8");
                        if (combinedParams.length() > 1)
                            combinedParams += "&" + paramString;
                        else
                            combinedParams += paramString;
                    }
                }
                HttpGet request = new HttpGet(url + combinedParams);
                // add headers
                if (headers!=null)
                {
                    headers=addCommonHeaderField(headers);
                    for (NameValuePair h : headers)
                        request.addHeader(h.getName(), h.getValue());
                }
                executeRequest(request, url);
                break;
            }
            case POST:
            {
                HttpPost request = new HttpPost(url);
                // add headers
                if (headers!=null)
                {
                    headers=addCommonHeaderField(headers);
                    for (NameValuePair h : headers)
                        request.addHeader(h.getName(), h.getValue());
                }
                if (params!=null)
                    request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
                executeRequest(request, url);
                break;
            }
        }
    }
    private ArrayList<NameValuePair> addCommonHeaderField(ArrayList<NameValuePair> _header)
    {
        _header.add(new BasicNameValuePair("Content-Type","application/x-www-form-urlencoded"));
        return _header;
    }
    private void executeRequest(HttpUriRequest request, String url)
    {
        HttpClient client = new DefaultHttpClient();
        HttpResponse httpResponse;
        try
        {
            httpResponse = client.execute(request);
            responseCode = httpResponse.getStatusLine().getStatusCode();
            message = httpResponse.getStatusLine().getReasonPhrase();
            HttpEntity entity = httpResponse.getEntity();

            if (entity != null)
            {
                InputStream instream = entity.getContent();
                response = convertStreamToString(instream);
                instream.close();
            }
        }
        catch (Exception e)
        { }
    }

    private static String convertStreamToString(InputStream is)
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
        String line = null;
        try
        {
            while ((line = reader.readLine()) != null)
            {
                sb.append(line + "\n");
            }
            is.close();
        }
        catch (IOException e)
        { }
        return sb.toString();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Android 调用 RESTful Web 服务? 的相关文章

  • 删除 android ListView 的底部分隔线

    我有固定的高度ListView 它在列表项之间有分隔线 但它还在最后一个列表项之后显示分隔线 有没有办法在最后一项之后不显示分隔线ListView 只需添加android footerDividersEnabled false 到您的 Li
  • 在 Hyperledger Composer REST API 上使用 Passport-http

    我想知道是否可以使用passport http来保护由composer rest server生成的Hyperledger Composer的REST API 以及什么是导出 COMPOSER PROVIDERS 配置 这个想法是使用先前生
  • hibernate 如何确保二级缓存使用数据库中的最新数据进行更新

    我读到 使用 hibernate 的二级缓存 它可以通过减少数据 对象检索的数据库命中来提高应用程序性能 但是hibernate是如何保证二级缓存与数据库中的数据是最新的呢 例如 假设下面的类是实体并持久化到数据库中 Entity clas
  • 更改 Java 字符串中的日期格式

    I ve a String代表一个日期 String date s 2011 01 18 00 00 00 0 我想将其转换为Date并将其输出到YYYY MM DD format 2011 01 18 我怎样才能实现这个目标 好的 根据我
  • Android O - 通知通道和NotificationCompat

    我无法改变这种感觉 Android 开发人员再次提出了一些新东西 却让每个人都对他们如何看待该功能的使用一无所知 我说的是 Android O 中的通知通道 多年来 我一直使用兼容性支持库来避免处理特定平台的细节 即 Notificatio
  • Android:直接从浏览器下载文件

    我试图让 Android 浏览器下载特定类型 xxx 的文件 这样我就可以设置一个应用程序与其关联 我已经成功完成了关联部分 因为我已经做到了 以便在资源管理器应用程序中单击正确类型的文件会加载适当的应用程序 我希望这会转移到浏览器 这样如
  • Java KeyListener:按下两个键时如何执行操作?

    请看下面的代码 import java awt event import javax swing import java awt public class KeyCheck extends JFrame private JButton ch
  • 我应该在哪里以 Java MVC 模式调用我的 swingworker

    我有一个程序 其设置基本上与此 MVC 示例中的程序一样 http www leepoint net notes java GUI struct 40mvc html http www leepoint net notes java GUI
  • 加入牛轧糖热点

    我的应用程序有 2 个按钮 一个用于创建热点 另一个用于加入热点 流程是 我在其中一台设备上创建一个热点 然后尝试将其与其他设备连接 通过我的应用程序 问题是 有时我无法加入由 Nougat 设备创建的热点 它会卡在 获取 IP 地址 上
  • String.substring 在 Java 中到底做了什么?

    我一直想如果我这样做String s Hello World substring 0 5 然后我就得到一个新字符串s Hello Java API 文档中也记录了这一点 返回一个新字符串 该字符串是该字符串的子字符串 但当我看到下面两个链接
  • 具有 jsonObject 的 android 列表视图

    我正在开展一项活动 该活动请求服务器上的一个 php 文件 此 php 文件将返回给我一个JSONArray having JSONObjects作为它的元素 我明白了jArray并提取其内容 例如所有jsonObjects 每个 json
  • 有人让动物嗅探器插件工作吗?

    maven animal sniffer 插件承诺告诉我我的代码是否有任何对 Java 1 6 或更高版本 API 的引用 这对于我们这些在 MacOSX Snow Leopard 只有官方 1 6 上开发但需要交付到 1 5 环境的人来说
  • 信号量如何工作?

    信号量可以小于0吗 我的意思是 假设我有一个 N 3 的信号量 并且我调用 down 4 次 那么 N 将保持为 0 但一个进程将被阻塞 反之亦然 如果一开始我调用 N 可以大于 3 吗 因为在我看来 如果 N 可以高于 3 如果一开始我调
  • 如何在android中动态创建按钮?

    我想创建一个这样的页面 这 7 个按钮已经存在 但如果用户想添加更多类别 按钮 那么他可以使用 按钮并使用删除 按钮 有制作这个的想法或教程吗 创建 删除按钮onClick of button and button如下 public voi
  • android 以编程方式在单选组按钮之间添加填充

    我有一个 xml 格式的单选组 按钮是通过编程生成的 如何以编程方式添加按钮之间的间距 我以为是这样的LayoutParams但我的对象没有明显的setPadding or setMargins方法 这就是我正在尝试的 RadioButto
  • Selenium WebDriver (java) 可以与浏览器的检查工具元素选择器交互吗?

    通过使用 selenium 我可以访问位于检查选项卡中的浏览器元素选择器 在浏览器中按 Ctrl Shift C 吗 我想使用该选择器 指向 一个元素 并使其在浏览器中突出显示 例如 简单的事情如下 WebElement elem driv
  • 重叠堆叠图像视图

    我正在尝试将图像视图堆叠在一起 70 重叠 我使用了一个frameLayout 并给每个elemnet填充了10 它有效 但是当涉及到处理事件时 这个填充让我很痛苦 有没有更好的重叠视图的方法 使用不同的布局 等 我正在为 Android
  • React Native - 方向锁定;我还能获得传感器的方向吗?

    我正在开发一个 React Native 应用程序 该应用程序设计为以纵向模式运行 方向通过清单锁定
  • 是否应该在 REST API PUT 请求中传递资源及其相关资源的所有字段?

    假设我有一个票证和评论资源 门票可以有很多评论 在您的更新端点中HTTP PUT api tickets
  • 找不到 com.android.tools.build:gradle:3.0.0 [重复]

    这个问题在这里已经有答案了 当我尝试从命令行构建可能的 Android 项目时 我收到以下错误消息 配置项目 mylib 时出现问题 无法解析配置 mylib classpath 的所有文件 找不到 com android tools bu

随机推荐

  • R 中两个向量之间的角度

    编程语言中最有效的方法是什么R计算两个向量之间的角度 根据第 5 页this PDF sum a b 是求向量点积的 R 命令a and b and sqrt sum a a 是求向量范数的R命令a and acos x 是反余弦的 R 命
  • 尽管有polyfills和浏览器列表,但默认的create-react-app在IE中不起作用

    我正在简单地寻求让 create react app 在 IE 11 中工作 我正在 Mac OS X 上工作 但我无法通过 VirtualBox 或 Windows 计算机 在开发和生产模式下 让 IE 11 工作 我对此进行了彻底的调查
  • 无法序列化成员 ,因为它是一个接口

    关注问题使用 CollectAs 时出现显式转换错误 来自 WebMethod 的代码 return client Cypher Match person Person Where Person person gt person Email
  • 无法解决“Sqlparameter 已包含在另一个 SqlparameterCollection 中”

    我在 Windows 服务中使用 2 个线程 来自同一类 我总是收到相同的错误消息 The SqlParameter is already contained by another SqlParameterCollection at Sys
  • Excel 条件格式宏

    I m trying to write a macro in excel to do some mundane task that I need to do in excel I need an macro that will condit
  • Mercurial hg 忽略无法正常工作

    情况 cat hgignore hgignore hg status M file1 M file2 M src project xml 我不想追踪project xml所以我跑 echo project xml gt gt hgignor
  • Vaadin Flow (Vaadin 10) 中的菜单栏小部件丢失?

    Vaadin 框架 Vaadin 8 提供了MenuBar小部件 如手册中讨论过 and 显示在采样器中 当我将手册切换到 Vaadin 10 模式时 我找不到MenuBar小部件 我知道 Vaadin 10 Vaadin Flow 是 V
  • 迁移到 JSF 2.2 后名称空间出现错误

    迁移到 JSF2 2 后 我面临以下问题 com sun faces config ConfigurationException The tag named passThroughAttribute from namespace http
  • 为什么与 printf 中的转换说明符不匹配的参数是未定义的行为?

    在 C n1570 7 21 6 1 10 和 C 通过包含 C 标准库 中 向 printf 提供类型与其转换规范不匹配的参数是未定义的行为 一个简单的例子 printf d 1 9 格式字符串指定 int 而参数是浮点类型 这个问题的灵
  • 为什么类型参数绑定 >: 的方法允许子类型?

    考虑以下 Scala 中堆栈的简单实现 abstract class Stack A def top A def pop Stack A case object EmptyStack extends Stack Nothing def to
  • 浮点表示错误?

    当我做这个乘法时 0 94 8700 输出是 8177 999999999999 但它本来应该是 8178 我正在使用 java 但我不认为这个错误与特定的编程语言有关 现在我的问题是 为什么会发生这种事 还有哪些其他数字 仅作为示例 会导
  • GCD:如何从两个线程写入和读取变量

    无论如何 这听起来可能是一个新手问题 我是 GCD 新手 我正在创建并运行以下两个线程 第一个将数据放入ivarmMutableArray第二个从中读取 如何锁定和解锁线程以避免崩溃并保持代码线程安全 Thread for writing
  • Aux 模式在 Scala 中实现什么功能?

    我对 Aux 模式 如在 shapeless 和其他地方使用的 有一点了解 其中类型成员被提取到类型参数中 并且我知道这是一种解决方法 因为同一参数列表中的参数不能依赖彼此之间 但我一般不清楚它的用途以及它解决什么问题 例如 我目前正在尝试
  • 如何混淆(保护)JavaScript? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想制作一个非开源的 JavaScript 应用程序 因此我想了解如何混淆我的 JS 代码 这可能吗 混淆 尝试YUI压缩器 它是一个非常受欢迎的工具 由 Yahoo UI 团队
  • 使用 PHP 从 SQL Server 选择数据

    我正在尝试使用 PHP 从我的 PC 上的本地数据库中选择数据 但当我运行 127 0 0 1 test php 该文件的名称 时 出现此错误 error Fatal error Uncaught Error Call to undefin
  • 如何在 ASP.Net MVC 视图中使用下划线/javascript 模板

    我只是想知道如何在 aspx 视图中使用下划线模板 因为下划线使用的 标记被 aspx 渲染引擎拾取并给我错误 例如 该模板给了我一个错误 因为 aspx 渲染引擎认为我正在尝试将这些东西绑定到模型 Thanks 来自精美手册 templa
  • iOS 上的 iframe 大小与 CSS

    有一个 iframe 它的内容基本上超出了框架的容纳范围 框架的大小基于浏览器屏幕大小 并让溢出滚动 这在除 iOS 之外的所有浏览器上都能完美运行 在 iOS 上 safari 决定调整框架大小以适应内容 不是你所期望的 jsFiddle
  • Azure Key Vault 证书 - 创建基本约束 CA:True

    我想通过 Azure 门户 Azure Key Vault 创建自签名 CA 证书 我不知道如何设置 X509 扩展基本约束 CA True 一些参考链接 https learn microsoft com en us powershell
  • 匹配以前缀开头的子字符串

    我被一些正则表达式困住了 我试图使用正则表达式匹配以给定前缀开头的每个子字符串 在 JavaScript 中 prefix pre regex pre foo bar bar pre bar barfoo replace regex sho
  • 如何从 Android 调用 RESTful Web 服务?

    我使用 Jersey Framework 和 Java 在 Netbean IDE 中编写了一个 REST Web 服务 对于用户需要提供用户名和密码的每个请求 我知道这种身份验证不是最佳实践 使用如下的curl命令 curl u user