如何在Android应用中实现服务端网页的POST请求?

服务端网页接收Android POST请求,处理数据并返回响应。

服务端网页Android Post请求详解

如何在Android应用中实现服务端网页的POST请求?

一、创建Web服务

1. 环境准备

开发工具:Eclipse和MyEclipse(用于编写Android客户端和服务端代码)。

服务器:Tomcat服务器,用于部署Servlet。

2. 创建Servlet

2.1 创建LoginAction类

如何在Android应用中实现服务端网页的POST请求?

package com.android.Login;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONSerializer;
public class LoginAction extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private LoginService service;
    @Override
    public void init() throws ServletException {
        super.init();
        service = new LoginDao(); // 初始化登录服务
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        PrintWriter writer = response.getWriter();
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        List<Object> params = new ArrayList<Object>();
        params.add(username);
        params.add(password);
        boolean flag = service.isUserExitLogin(params); // 调用服务判断用户是否存在
        if (flag) {
            ResultMessage message = new ResultMessage(1, "登陆成功"); // 封装结果信息
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("result", message);
            String jsonString = JSONSerializer.toJSON(map).toString(); // 结果封装成JSON并传给客户端
            writer.println(jsonString);
        } else {
            writer.println("登录失败");
        }
        writer.flush();
        writer.close();
    }
}

2.2 配置web.xml

<servlet>
    <servlet-name>LoginAction</servlet-name>
    <servlet-class>com.android.Login.LoginAction</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>LoginAction</servlet-name>
    <url-pattern>/loginaction</url-pattern>
</servlet-mapping>

二、Android客户端发送POST请求

1. 创建Activity布局文件activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    tools:context=".MainActivity">
    <EditText android:id="@+id/etUsername" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <EditText android:id="@+id/etPassword" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/etUsername"/>
    <Button android:id="@+id/butPost" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/etPassword" android:text="提交"/>
</RelativeLayout>

2. 编写MainActivity类

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.UrlEncodedFormEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
    private EditText mEtUsername;
    private EditText mEtPassword;
    private Button mButPost;
    private String LOGIN_URL = "http://10.0.2.2:8080/webtest/loginaction"; // 注意模拟器中的IP地址是10.0.2.2
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEtUsername = findViewById(R.id.etUsername);
        mEtPassword = findViewById(R.id.etPassword);
        mButPost = findViewById(R.id.butPost);
        mButPost.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                submitPost();
            }
        });
    }
    private void submitPost() {
        String username = mEtUsername.getText().toString();
        String password = mEtPassword.getText().toString();
        HttpPost httpPost = new HttpPost(LOGIN_URL);
        List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
        params.add(new BasicNameValuePair("username", username));
        params.add(new BasicNameValuePair("password", password));
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpResponse httpResponse = httpClient.execute(httpPost);
            if (httpResponse.getStatusLine().getStatusCode() == 200) {
                String result = EntityUtils.toString(httpResponse.getEntity());
                Toast.makeText(MainActivity.this, "登录结果:" + result, Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "请求失败", Toast.LENGTH_SHORT).show();
            }
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(MainActivity.this, "发生异常", Toast.LENGTH_SHORT).show();
        }
    }
}

三、相关问题与解答

1. 为什么使用HttpPost而不是HttpGet?

答:HttpPost将数据放在请求体中进行传输,适合传输大量数据或敏感数据,而HttpGet将参数放在URL后面,不适合传输敏感数据且有长度限制,HttpPost更适合表单提交等操作。

如何在Android应用中实现服务端网页的POST请求?

2. 如何在Android中使用Handler更新UI?

答:在子线程中通过Handler发送消息到主线程,然后在主线程的handleMessage方法中更新UI,创建一个继承自Handler的内部类,并在其中实现handleMessage方法来处理从子线程发送的消息。

以上内容就是解答有关“服务端网页androidpost”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/777157.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seoK-seo
Previous 2024-12-30 22:34
Next 2024-12-30 22:36

相关推荐

  • css 安卓怎么适配「css怎么适配移动端」

    在移动设备上,由于屏幕尺寸和分辨率的差异,我们需要对 CSS 进行适配,以确保在不同设备上都能正常显示。本文将介绍如何在安卓设备上进行 CSS 适配。 1. 媒体查询 媒体查询是 CSS3 中的一个重要特性,它允许我们根据设备的特定属性(如宽度、高度、方向等)来应用不同...

    2023-12-15
    0143
  • 安卓拖动进度条

    在Android应用开发中,进度条是一个非常常见的控件,它可以帮助用户了解任务的完成进度,SeekBar是Android SDK中的一个进度条控件,它可以让用户通过拖动滑块来改变进度值,本文将介绍如何简单地使用SeekBar实现一个可拖动的进度条,1、在布局文件中添加SeekBar控件。可以通过设置SeekBar的max属性为一个变量来实现,int maxValue = ...; seekBa

    2023-12-29
    0115
  • 制作app应用

    制作APP软件教程在数字化时代,APP已经成为我们日常生活中不可或缺的一部分,无论是购物、学习、娱乐,还是社交,都离不开各种各样的APP,如何制作一个自己的APP呢?这里我们将以App Inventor为例,来详细介绍如何制作APP。App Inventor简介App Inventor是一个由Google开发的在线应用开发工具,它允许……

    2023-12-31
    0130
  • 如何在移动应用中有效调用JavaScript代码?

    在移动应用开发中,调用JavaScript代码是一个常见的需求,无论是为了与前端页面进行交互,还是为了执行某些特定的逻辑,都可能需要从原生代码中调用JavaScript,本文将详细介绍如何在iOS和Android平台上实现这一功能,iOS平台使用WKWebView加载网页并调用JavaScript1、创建WKW……

    2024-12-07
    04
  • html5农场「im农场」

    欢迎进入本站!本篇文章将分享html5农场,总结了几点有关im农场的解释说明,让我们继续往下看吧!Cocos2D-X游戏开发技术精解的作品目录《捕鱼达人》、《三国塔防-蜀传》、《口袋站界:魔界勇士》、《胡莱三国》、《三国群殴传》等,包括人人网、空中网、439网龙、Haypi、Tinyco、完美世界等国内外领先的游戏开发公司,都在使用Cocos2d-x开发手机游戏。

    2023-11-19
    0135
  • 安卓如何投屏到win11

    安卓投屏到Win11的技术教程随着科技的发展,手机和电脑的融合越来越紧密,很多用户希望将安卓手机的画面投射到Windows 11电脑上,以便在更大的屏幕上观看视频、玩游戏或者进行多任务处理,本文将详细介绍如何将安卓手机投屏到Win11电脑上。一、准备工作1、确保你的电脑和手机都已连接到互联网。2、在电脑上安装最新版本的Windows ……

    2023-12-10
    0249

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入