Android 採用get方式提交數據到伺服器

来源:http://www.cnblogs.com/wuyudong/archive/2016/06/18/5596640.html
-Advertisement-
Play Games

首先搭建模擬web 伺服器,新建動態web項目,servlet代碼如下: 再新建一個jsp頁面 新建android項目,頁面佈局: 代碼如下: 添加許可權:android.permission.INTERNET 運行項目後點擊按鈕後提示錯誤: 06-18 21:08:16.237: W/System. ...


首先搭建模擬web 伺服器,新建動態web項目,servlet代碼如下:

package com.wuyudong.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.catalina.User;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("用戶名:" + username);
        System.out.println("用戶名:" + password);
        if ("wuyudong".equals(username) && "123".equals(password)) {
            response.getOutputStream().write("login success".getBytes());
        } else {
            response.getOutputStream().write("login failed".getBytes());

        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

再新建一個jsp頁面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登錄頁面</title>
</head>
<body>
    <form action="LoginServlet" method="get">

        用戶名:<input name="username" type="text"><br> 密碼:<input
            name="password" type="password"><br> <input
            type="submit">

    </form>

</body>
</html>

新建android項目,頁面佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/et_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入用戶名"
        android:inputType="text" />

    <EditText
        android:id="@+id/et_pwd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入密碼"
        android:inputType="textPassword" />
    <Button 
        android:onClick="login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登錄"
        />

</LinearLayout>

代碼如下:

package com.wuyudong.loginclient;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
    private EditText et_name;
    private EditText et_pwd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        et_name = (EditText) findViewById(R.id.et_name);
        et_pwd = (EditText) findViewById(R.id.et_pwd);

    }

    public void login(View view) {

        String name = et_name.getText().toString().trim();
        String pwd = et_pwd.getText().toString().trim();

        if (TextUtils.isEmpty(name) || TextUtils.isEmpty(pwd)) {
            Toast.makeText(this, "用戶名密碼不能為空", 0).show();
        } else {
            // 模擬http請求,提交數據到伺服器
            String path = "http://169.254.168.71:8080/web/LoginServlet?username="
                    + name + "&password=" + pwd;
            try {
                URL url = new URL(path);
                // 2.建立一個http連接
                HttpURLConnection conn = (HttpURLConnection) url
                        .openConnection();
                // 3.設置一些請求方式
                conn.setRequestMethod("GET");// 註意GET單詞字幕一定要大寫
                conn.setRequestProperty(
                        "User-Agent",
                        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36");

                int code = conn.getResponseCode(); // 伺服器的響應碼 200 OK //404 頁面找不到
                                                    // // 503伺服器內部錯誤
                if (code == 200) {
                    InputStream is = conn.getInputStream();
                    // 把is的內容轉換為字元串
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    int len = -1;
                    while ((len = is.read(buffer)) != -1) {
                        bos.write(buffer, 0, len);
                    }
                    String result = new String(bos.toByteArray());
                    is.close();
                    Toast.makeText(this, result, 0).show();

                } else {
                    Toast.makeText(this, "請求失敗,失敗原因: " + code, 0).show();
                }

            } catch (Exception e) {
                e.printStackTrace();
                Toast.makeText(this, "請求失敗,請檢查logcat日誌控制台", 0).show();
            }

        }

    }

}

添加許可權:android.permission.INTERNET

運行項目後點擊按鈕後提示錯誤:

06-18 21:08:16.237: W/System.err(7417): android.os.NetworkOnMainThreadException

android強行讓4.0以後的版本不去檢查主線程訪問網路。

解決辦法,可以在onCreate裡面加上下麵這段代碼:

StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

搞定


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • 一:GIF(Graphics Interchange Format) 簡介GIF圖形交換格式是一種點陣圖圖形文件格式,以8位色(即256種顏色)重現真彩色的圖像。 它實際上是一種壓縮文檔,採用LZW壓縮演算法進行編碼,有效地減少了圖像文件在網路上傳輸的時間。 它是目前廣泛應用於網路傳輸的圖像格式之一。優 ...
  • ...
  • 一.概述 * 鬧鐘功能概述:添加鬧鐘,刪除鬧鐘 * 思路: * 1.給一個button添加點擊監聽,用於添加鬧鐘 * 2.提供一個視窗進行鬧鐘時間的選擇 * 3.數據保存:對鬧鐘的數據進行保存 * 4.數據讀取:打開app的時候對鬧鐘的數據進行讀取,以便保留以前設置的鬧鐘 * 5.對鬧鐘進行刪除操作 ...
  • 【版權所有,轉載請註明出處。出處:http://www.cnblogs.com/joey-hua/p/5597705.html 】 Linux內核因為使用了記憶體分頁機制,所以相對來說好理解些。因為記憶體分頁就是為了方便管理記憶體。 說到記憶體分頁,最根部的要屬頁目錄表了,head.h中: 然後再看head ...
  • “階段一”是指我第一次系統地學習Android開發。這主要是對我的學習過程作個記錄。 最近學到用AsyncTask來處理有關網路的操作。雖然代碼看上去不是很複雜,但仍有很多地方有疑惑。所以研讀了一下API文檔,在這裡把我學到的和練習的代碼展示出來。如有錯誤,歡迎指出! 一、關於AsyncTask的< ...
  • 接著上篇《Android 採用get方式提交數據到伺服器》,本文來實現採用post方式提交數據到伺服器 首先對比一下get方式和post方式: 修改佈局: 添加代碼: ...
  • 【版權所有,轉載請註明出處。出處:http://www.cnblogs.com/joey-hua/p/5596830.html 】 上一篇說到進程調度歸根結底是調用timer_interrupt函數,在system_call.s中: 前面一堆push指令保存當前的寄存器,然後在ret_from_sy ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...