如何在 Android 中访问 Web API 方法的返回值?

2024-01-30

在对如何做到这一点感到困惑之后(可以看出here https://stackoverflow.com/questions/22797194/how-to-call-a-restful-method-from-android and here https://stackoverflow.com/questions/22798949/why-is-my-web-api-server-refusing-to-accept-calls-from-android,我现在使用以下代码成功连接到我的服务器应用程序和适当的 RESTful 方法:

public void onFetchBtnClicked(View v){
    if(v.getId() == R.id.FetchBtn){
        Toast.makeText(getApplicationContext(), "You mashed the button, dude.", Toast.LENGTH_SHORT).show();
    new CallAPI().execute("http://10.0.2.2:28642/api/Departments/GetCount?serialNum=4242");
    }
}

public static class CallAPI extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... params) {

        String urlString=params[0]; // URL to call
        String resultToDisplay = "";
        InputStream in = null;

        // HTTP Get
        try {
            URL url = new URL(urlString);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            in = new BufferedInputStream(urlConnection.getInputStream());
        } catch (Exception e ) {
            System.out.println(e.getMessage());
            return e.getMessage();
        }
        return resultToDisplay;

    }

    protected void onPostExecute(String result) {
        Log.i("FromOnPostExecute", result);
    }

} // end CallAPI

我意识到我需要向 resultToDisplay 分配一些东西(初始化时的空字符串除外),但是什么呢?我需要访问/隐藏“in”的哪一部分为字符串?

UPDATE

“手动”方式对我有用,但 fancypants apache io utils“没那么多”(好吧,它编译......)。这是我的代码:

try {
    URL url = new URL(urlString);
    HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
    in = new BufferedInputStream(urlConnection.getInputStream());
    resultToDisplay = getStringFromInputStream(in);
    total = IOUtils.toString(in);

resultToDisplay 的分配有效(我得到“18”)。总计的分配没有(我得到,“”)。

Note:“getStringFromInputStream()”方法来自 Raghunandan 的链接。

UPDATE 2

这很有效(使用 WIllJBD 的想法来使用 apache commons 的 IOUtils):

new CallWebAPI().execute("http://10.0.2.2:28642/api/Departments/GetCount?serialNum=4242");
. . .
private class CallWebAPI extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... params) {

        String urlString=params[0]; // URL to call
        String result = "";

        // HTTP Get
        try {
            URL url = new URL(urlString);
            HttpURLConnection urlConnection =  
                (HttpURLConnection)url.openConnection();
            InputStream inputStream = urlConnection.getInputStream();
            if (null != inputStream)
                result= IOUtils.toString(inputStream);
        } catch (Exception e ) {
            System.out.println(e.getMessage());
            return e.getMessage();
        }
        return result;
    }

    @Override
    protected void onPostExecute(String result) {
        Log.i("RenameTheWashingtonFootballTeamTheRedskinPeanuts", result);
    }
}

...所以显然没有必要将“编译文件('libs/commons-io-2.4.jar')”之类的内容添加到 build.gradle 的依赖项部分,因为看起来至少有一次是必要的,根据this http://www.codeproject.com/Tips/607552/How-to-add-external-library-file-in-Android-Studio。如果有人可以验证不再需要对 build.gradle 的此类修改,我会很高兴。

UPDATE 4

我只是注意到我无意中从 onPostExecute() 方法中删除了“@Override”,但这没有什么区别 - 没有它它工作得很好,一旦我恢复它它工作得很好。那么,不拥有它有什么好处——它只是多余的东西吗?


为什么不使用 IOUtils 之类的东西?

InputStream inputStream = urlConnection.getInputStream();
if (inputStream != null)
    String content = IOUtils.toString(inputStream);

http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/IOUtils.html http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/IOUtils.html

现在您可以使用众多库之一将字符串解析为 Json 或 XML。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android 中访问 Web API 方法的返回值? 的相关文章

  • 通知声音不适用于 api 10 android

    我用这个功能来显示状态notification 一切正常 但没有声音播放notification public void notifiction main String ticker String title String text int
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • Jetty、websocket、java.lang.RuntimeException:无法加载平台配置器

    我尝试在 Endpoint 中获取 http 会话 我遵循了这个建议https stackoverflow com a 17994303 https stackoverflow com a 17994303 这就是我这样做的原因 publi
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • Android 为什么这不会抛出错误的线程异常?

    我的印象是视图只能从主线程操作 但是 为什么这不会崩溃 public class MainActivity extends Activity TextView tv Override protected void onCreate Bund
  • 为什么 Google 建议将库复制到您的树中?

    谷歌的Play 服务 API 的使用说明 http developer android com google play services setup html 例如 说 将 extras google google play service
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • 在android中从SD卡上传图像到facebook

    我无法从 SD 卡上传 Facebook 上的图像 我使用了下面的代码 但它没有给我错误 但同时它没有上传图像 byte data null try FileInputStream fis new FileInputStream filep
  • 使用 HtmlUnit 定位弹出窗口

    我正在构建一个登录网站并抓取一些数据的程序 登录表单是一个弹出窗口 所以我需要访问这个www betexplorer com网站 在页面的右上角有一个登录链接 写着 登录 我单击该链接 然后出现登录弹出表单 我能够找到顶部的登录链接 但找不
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • 列表过滤器内的 Java 8 lambda 列表

    示例 JSON id 1 products id 333 status Active id 222 status Inactive id 111 status Active id 2 products id 6 status Active
  • android系统用户和linux root用户有什么区别

    当我将手机连接到电脑并使用adb shell与我的手机通信并输入的命令ps命令输出当前在我的手机上运行的进程信息 我发现有两个特殊用户 一个是root 另一个是system 据我所知 Android是基于linux的 所以root用户是最大
  • java XMLSerializer 避免复杂的空元素

    我有这个代码 DocumentBuilderFactory factory DocumentBuilderFactory newInstance DocumentBuilder builder factory newDocumentBuil
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • Android Espresso 单击按钮时出现错误

    我正在尝试使用 espresso 框架为 Android 应用程序编写一些 UI 测试 现在我只是检查启动屏幕上是否存在所有元素 然后尝试单击登录按钮 单击按钮时 测试由于错误而失败 我似乎无法理解为什么会发生这种情况 我的测试代码是 Ru
  • Keystore getEntry 在 Android 9 上返回 NULL

    c我已对存储在 Android 密钥库中的登录密码进行了加密和解密 在 Android 9 上 我观察到应用程序在尝试解密密码时崩溃 我无法重现它 但拥有 Pixel 3 的用户是崩溃的设备之一 下面是我如何从密钥库解密密码 private
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • Spark DataFrame 分区器为 None

    Spark新手 创建 DataFrame 后 我尝试根据 DataFrame 中的列对其进行分区 当我使用检查分区器时data frame rdd partitioner I get None作为输出 分区使用 gt data frame
  • 在 MySQL 服务器或 PHP 中更快地随机化许多结果

    在 MySQL 服务器上随机化大量结果的排序顺序更快还是在 PHP 中收到数据后更快 有谁有任何数据可以备份 甚至是轶事经验吗 我有根据的猜测是 MySQL 毫无疑问会获胜 它就是为了以这种方式处理数据而设计的 必须将所有数据移至 PHP
  • C 中字符串中所有可能的组合

    我正在尝试使用 C 打印字符串 abc 的所有可能组合 有人可以帮助指出我在这段代码中哪里出错了吗 我正在使用这里提到的算法 http hackercs com videos Combinations of a String Part 2
  • 如何编写带有子查询作为 WHERE 子句一部分的 Django 查询?

    我正在使用 Django 和 Python 3 7 我无法弄清楚如何编写 Django 查询 其中子查询作为 where 子句的一部分 这是模型 class Article models Model objects ArticleManag
  • JQuery 文档就绪 - 允许多个吗? [复制]

    这个问题在这里已经有答案了 可能的重复 jQuery 拥有多个 document ready function 是否不好 https stackoverflow com questions 1148241 jquery is it bad
  • 我如何得到,用户在 facebook sdk 4.0.1 中登录或注销

    我正在使用 Facebook 新的 sdk 4 0 1 因为当我登录按钮更改为注销时 相同的按钮用于注销 无需任何代码 但实际上我想在注销时进行一些编码 那么我如何区分该 SDK 中的这两件事呢 我如何声明注销方法 您可以检查令牌何时更改
  • JavaScript 警报后页面重新加载/刷新 - 不希望这样做!

    我的 JavaScript 函数正在工作 但由于某种原因 在我的 IF 语句中显示警报后 页面重新加载 刷新 但我不希望它这样做 这是为什么 我怎样才能改变我的功能 使它不会这样做 我的功能 function valSubmit varNa
  • 为什么内联未命名命名空间?

    专家快速介绍 C 11 允许声明未命名的命名空间inline 这对我来说似乎是多余的 在未命名命名空间中声明的内容已经被使用 就像它们在封闭命名空间中声明一样 所以我的问题是 这是什么意思 inline namespace anonymou
  • 无需 APNS 从服务器到 iOS 设备的实时数据推送 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 是否可以在操作中从 view.yml 获取值

    我想知道是否可以在操作中从 view yml 获取样式表的名称 最好使用像以下这样简单的东西 sfConfig get 我想访问 view yml 中的现有声明 而不是对其进行硬编码或将其复制到 app yml 之类的地方 Thanks 如
  • iOS8 中的扩展 - 由于没有系统应用程序而终止

    尝试运行我的 iOS 小部件 它是 Today 扩展 每次我尝试将其添加到通知中心时 我不断收到消息 由于没有系统应用程序而终止 有想法该怎么解决这个吗 我正在尝试制作一个包含表格视图的扩展 在您的项目设置中查找显示 启动屏幕文件 的设置
  • “mvn cleangenerate-sources”无法解决依赖关系

    there 我遇到了一个奇怪的问题 我有一个用 Maven 构建的多模块企业项目 我像这样设置项目层次结构 parentPom MyEar packaging ear MyUtilJar packaging jar MyEJB packin
  • 新安装时,curl 和 wget 对于 helloworld.php 返回错误 500,但浏览器正常

    我没有 htaccess 文件 我有index php 它包含以下内容 并且在 Chrome 或 Safari 等浏览器中运行良好 当我将其加载到浏览器中时 我得到 你好世界 当我尝试以下任何操作时 我收到错误 500 内部服务器错误 us
  • window.onresize 不在 Chrome 中触发,但在 Chrome Incognito 中触发

    我想问一下 在什么情况下可以这样呢 我有一个网站window onresize事件 适用于 Firefox IE9 Chrome 隐身窗口 但不适用于 Chrome 问题是 在我对代码进行一些不相关的更改之前 或者在我昨天更新 chrome
  • 在 Swift 中从类创建 JSON 对象

    我对 iOS 开发和 Swift 还很陌生 所以请耐心等待 我有一个类对象定义如下 class LocationPoint var x Double var y Double var orientation Double init x Do
  • 如何在 App store connect 中批准新版本

    如何在 App store connect 中批准新版本 我的意思是 我已经在苹果商店上提供了该移动应用程序的第一个版本 但现在我想发布一个新版本 我已经做的是通过 Xcode gt archive 上传它 然后在 appstoreconn
  • 如何在erlang中连接列表而不创建嵌套列表?

    我正在努力成为一名优秀的管理者并避免使用 我需要将一个元组添加到列表的末尾 而不创建嵌套列表 并且希望不必向后构建它并反转它 给定元组 T 和列表 L0 和 L1 当我使用 T L0 I get 元组 列表0 但是当我使用 L0 T 我得到
  • 如何从 Angular 应用程序范围之外更改 Angular 中的路由?

    我的问题标题可能有点令人困惑 所以希望以下详细信息能够澄清它 本质上 导航栏是我无法控制的 它是用简单的 HTML JS 编写的 我的应用程序是用 Angular 编写的 并在其中设置了路由 我可以做些什么来从导航栏触发 Angular 应
  • 复合类型的案例类伴生对象生成错误

    定义的空特征测试 trait Test 复合类型中使用什么 scala gt val a Int with Test 10 asInstanceOf Int with Test a Int with Test 10 以及带有复合类型参数的案
  • 如何在 Android 中访问 Web API 方法的返回值?

    在对如何做到这一点感到困惑之后 可以看出here https stackoverflow com questions 22797194 how to call a restful method from android and here h