Android HttpURLConnection
也许你对 PUT
请求有点陌生,因为我们日常使用的都是 GET
和 POST
PUT
请求其实和 POST
差不多的,几乎可以说是一样的,只要把正常的 POST
中的方法设置改成下面就好了
conn.setRequestMethod("PUT");
范例
接下来我们写一个范例来发送 PUT 请求吧
我们要数据发送到 https://www.twle.cn/dy/text/getpost 它会输出我们发送的数据
-
创建一个 空的 Android 项目
cn.twle.android.HttpPut
-
修改
activity_main.xml
添加布局<?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:text="要发送的数据" android:layout_width="wrap_content" android:layout_height="44dp" /> <EditText android:id="@+id/ms_chat" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="你输入你想说的话" android:text="简单教程,简单编程" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btn_get" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="发送数据" /> </LinearLayout> <WebView android:id="@+id/ms_webview" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
-
然后在
MainActivity.java
目录下创建WebHelper.java
package cn.twle.android.httpput; import android.util.Log; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; public class WebHelper { public static String put(String url,HashMap<String,String> postData) { String msg = ""; try{ HttpURLConnection conn = (HttpURLConnection) (new URL(url)).openConnection(); //设置请求方式,请求超时信息 conn.setRequestMethod("PUT"); conn.setReadTimeout(5000); conn.setConnectTimeout(5000); //设置运行输入,输出: conn.setDoOutput(true); conn.setDoInput(true); //Post方式不能缓存,需手动设置为false conn.setUseCaches(false); // 设置请求的数据 String data = ""; for ( HashMap.Entry<String,String> entry:postData.entrySet()) { data += entry.getKey() + "=" + URLEncoder.encode(entry.getValue(),"UTF-8"); } //获取输出流 OutputStream out = conn.getOutputStream(); out.write(data.getBytes()); out.flush(); if (conn.getResponseCode() == 200) { // 获取响应的输入流对象 InputStream is = conn.getInputStream(); // 创建字节输出流对象 ByteArrayOutputStream message = new ByteArrayOutputStream(); // 定义读取的长度 int len = 0; // 定义缓冲区 byte buffer[] = new byte[1024]; // 按照缓冲区的大小,循环读取 while ((len = is.read(buffer)) != -1) { // 根据读取的长度写入到os对象中 message.write(buffer, 0, len); } // 释放资源 is.close(); message.close(); // 返回字符串 msg = new String(message.toByteArray()); } }catch(Exception e){e.printStackTrace();} return msg; } }
-
修改
AndroidManifest.xml
加上网络权限<uses-permission android:name="android.permission.INTERNET" />
-
最后修改
MainActivity.java
完善各种逻辑package cn.twle.android.httpput; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.webkit.WebView; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.util.HashMap; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private WebView ms_webview; private Button btn_get; private EditText ms_chat; private String detail = ""; // 用于刷新界面 private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0x001: // 解决坑死的乱码问题 ms_webview.getSettings().setDefaultTextEncodingName("UTF-8"); ms_webview.loadData(detail,"text/html;charset=UTF-8",null); Toast.makeText(MainActivity.this, "数据发送完毕", Toast.LENGTH_SHORT).show(); break; default: break; } } ; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindViews(); } private void bindViews() { btn_get = (Button) findViewById(R.id.btn_get); ms_chat = (EditText) findViewById(R.id.ms_chat); ms_webview = (WebView) findViewById(R.id.ms_webview); btn_get.setOnClickListener(this); } @Override public void onClick(View view) { final HashMap<String,String> postData = new HashMap<String, String>(); postData.put("chat",ms_chat.getText().toString()); new Thread() { public void run() { try { detail = WebHelper.put("https://www.twle.cn/dy/text/getpost",postData); } catch (Exception e) { e.printStackTrace(); } handler.sendEmptyMessage(0x001); }; }.start(); } }
Android 不允许在非 UI 线程中进行 UI 操作,所以使用 Handler
完成异步更新 UI