Android - POST 到 RESTful Web 服务

2024-01-05

我正在寻找有关如何将数据发布到 Android 应用程序中的 Web 服务的一些指导。不幸的是,这是一个学校项目,所以我无法使用外部库。

Web 服务有一个基本 URL,例如:

http://example.com/service/create

并采用两个变量,格式如下:

username = "user1"
locationname = "location1"

Web 服务是 RESTful 的,并且使用 XML 结构(如果这有区别的话)。根据我的研究,我知道我应该使用 URLconnection 而不是已弃用的 HTTPconnection,但我找不到我正在寻找的示例。

这是我的尝试,目前不起作用:

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toPost test = new toPost();
        text.execute();
    }

    private class toPost extends AsyncTask<URL, Void, String> {
        @Override
        protected String doInBackground(URL... params) {
            HttpURLConnection conn = null;
            try {
                URL url = new URL("http://example.com/service");
                conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(10000);
                conn.setConnectTimeout(15000);
                conn.setRequestMethod("POST");
                conn.setDoInput(true);
                conn.setDoOutput(true);
                String body = "username=user1&locationname=location1";
                OutputStream output = new BufferedOutputStream(conn.getOutputStream());
                output.write(body.getBytes());
                output.flush();
            } catch (ProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                conn.disconnect();
            }
            return null;
        }
    }

}

我会使用volley库,根据谷歌的建议 http://developer.android.com/training/volley/simple.html

该页面上解释了提出请求,但很简单:

final TextView mTextView = (TextView) findViewById(R.id.text);
...

// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";

// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        // Display the first 500 characters of the response string.
        mTextView.setText("Response is: "+ response.substring(0,500));
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        mTextView.setText("That didn't work!");
    }
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - POST 到 RESTful Web 服务 的相关文章

随机推荐

  • 使用共享首选项包来存储用户最喜欢的项目,但它不起作用

    这是用户选择一个项目作为最爱的地方 class ItemCard extends StatefulWidget ValueKey key ItemCard this key super key key override State
  • Delphi中如何将字符串保存到文本文件中?

    创建字符串并将其保存到的最简单方法是什么 txt files Use TStringList uses Classes Dialogs Classes for TStrings Dialogs for ShowMessage var Lin
  • Jquery datepicker更改事件触发和input的默认更改事件

    我有日期选择器
  • 防止 Mathematica 中出现雪崩的运行时错误

    当笔记本超出几个功能时我遇到的典型情况 我评估一个表达式 但得到的不是正确答案Beep接下来是数十个无用的警告 然后是 的进一步输出将被抑制 我发现一件事很有用 在函数内部使用类似 Python 的 assert 来强制内部一致性 还有其他
  • 什么 SQL 在第一列中返回重复项,而第二列中的值不同?

    问题与此非常相似查找重复项 https stackoverflow com questions 6057352 find duplicates in sql但我只想找到那些代码与 ROME 不同且至少有一个名称是 ROME 的重复 ID 我
  • 使用 Babel 实现 GAE webapp 应用程序国际化

    您将如何使用 Google App Engine Web 应用程序国际化BABEL http babel edgewall org 我在这里寻找所有阶段 标记要翻译的字符串 提取它们 翻译 配置您的应用程序以加载浏览器请求的正确语言 1 在
  • Cordova/Phonegap Google 地图插件上标记图标的本地图像

    是否可以使用设备本地存储的图像作为标记图标 我可以使用 URL 并且它可以工作 但是当我尝试使用本地图像时 它不会加载 我应该如何引用图像 这是一个多平台应用程序 因此我无法使用 Android 等设备特定路径file android as
  • 获取span的内容

    如何获取 span 的内容 我正在寻找一种方法让所有这些都变得简单 而不是 jQuery javascript 和一点 jQuery var swear words arr new Array bad evil freak var rege
  • 用户与当前数据匹配

    我有一个包含两种不同类型的用户 导师和学员 的数据库 我希望第二组 学员 能够 搜索 第一组 导师 中与其个人资料匹配的人 导师和学员都可以随时进入并更改其个人资料中的项目 目前 我使用 Apache Mahout 进行用户匹配 recom
  • Guzzle http 的 Laravel 中的错误日志记录被截断

    Guzzle http 正在截断超过 120 个字符的异常 但我需要记录完整的异常消息 我怎样才能做到这一点 我正在使用 laravel 4 2 22 try whatever catch GuzzleHttp Exception Requ
  • 测试浏览器是否支持多个文件上传?

    有没有办法测试给定的浏览器是否支持multiple文件上传元素上的属性 服务器端或客户端实现就足够了 我确实意识到我可以针对支持该功能的已知浏览器列表来测试用户代理 但这似乎是一个相当脆弱的实现 即 如果 IE 10 在最终启动时支持该功能
  • 更改 Angular 2 的 Material 设计主题

    我正在尝试使用角材料2 https github com angular material2与我的 Angular 2 应用程序 我没有找到如何全局更改材质主题 primaryColor ETC 我知道 Angular Material 2
  • XElement Add 函数将 xmlns="" 添加到 XElement

    我有一个为列表对象生成 xml 的函数 public XDocument ToXML foreach var row in this var xml row ToXml template Root Add xml return templa
  • 我的角度中特定页面的标题隐藏

    我正在研究角度项目 我的需要是仅在登录页面上隐藏标题块 我试图隐藏登录页面上的标题 但它对我来说仍然不起作用 你能帮我在登录状态下隐藏它吗 这是我的索引 html div src div div class div div div 这是我的
  • 如何在不删除子元素的情况下删除包装器(父元素)?

    我想删除父级而不删除子级 这可能吗 HTML 结构 div class wrapper img div div class button Remove wrapper div 单击按钮后我想要 img div class button Re
  • 从连续数据流播放音频 (iOS)

    整个早上我都在为这个问题苦苦思索 我已经设置了与返回音频数据的数据源的连接 它是一个录音设备 因此数据没有设定长度 数据只是流入 就像 如果您要打开一个到收音机的流 我已经成功地接收了我的代码中的所有数据包 现在我只需要玩它 我想播放传入的
  • 按降序对 int 数组进行排序会给出“方法不适用于参数”

    我正在尝试使用以下代码在 Java 中按降序对数组进行排序 for int i 0 i lt arr length i Comparator comparator Collections reverseOrder Arrays sort a
  • 用于数据库表的 Rails 3 I18n

    我正在寻找一些有关使用国际化最佳实践的提示和建议 我四处搜寻 但我对所读到的内容并不满意 我读过的大多数文章都集中在使用 yml 文件进行国际化 这在我的情况下不起作用 我目前有几个带有英文文本的数据库表 其中一些表格的文本字段只有几句话长
  • 大数组上的 Python MemoryError

    这是我尝试运行的 python 脚本 n 50000000000 50 billion b 0 n for x in range 0 n b x random randint 1 899999 但我得到的输出是 E python gt py
  • Android - POST 到 RESTful Web 服务

    我正在寻找有关如何将数据发布到 Android 应用程序中的 Web 服务的一些指导 不幸的是 这是一个学校项目 所以我无法使用外部库 Web 服务有一个基本 URL 例如 http example com service create 并