如何从 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 服务? 的相关文章

  • 如何使用 IF 检查 TextView 可见性

    我有一个 onCheckedChangeListener 来根据选择的单选按钮显示文本视图 我有 1 个疑问和 1 个难题 想知道是否有人可以帮助我 问题 您能否将单选组默认检查值设置为 否 单选按钮 以便一开始就不会检查任何内容 问题 如
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 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