Android Studio 实现网络请求 - 5种方法

本教程将介绍如何在Android Studio中使用不同的方法实现网络请求,并提供相应的代码示例。

1. 使用Java语言实现

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class CoocNet {
    private static final String URL = "http://172.30.9.250:10000/portal_ylsy/login.do";

    public static void coocnet(String usename, String ip) throws IOException {
        Map<String, String> data = new HashMap<>();
        data.put("timeout", "5000");
        data.put("piresunalw", ip);
        data.put("picanalw", "");
        data.put("camresuanlw", "2c:48:81:6c:a1:1d");
        data.put("pisab", "");
        data.put("portalssid", "YLU-Living");
        data.put("servicetype", "0");
        data.put("macautologin", "nomacAuto");
        data.put("schoolN", usename);
        data.put("schoolP", "sssss");

        String sss = "http://172.30.9.250:10000/portal_ylsy/portal_ylsy/loginpage/login.jsp?wlanuserip=" + ip + "&wlanacip=&basip=&wlanusermac=2c:48:81:6c:a1:1d&portalssid=YLU-Living";

        OkHttpClient client = new OkHttpClient();
        RequestBody body = RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"), getParams(data));
        Request request = new Request.Builder()
                .url(URL)
                .post(body)
                .addHeader("Accept", "*/*")
                .addHeader("Accept-Encoding", "gzip, deflate")
                .addHeader("Accept-Language", "zh-CN,zh;q=0.9")
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .addHeader("Host", "172.30.9.250:10000")
                .addHeader("Content-Length", "646")
                .addHeader("Connection", "keep-al ive")
                .addHeader("Origin", "http://172.30.9.250:10000")
                .addHeader("Referer", sss)
                .addHeader("User-Agent", "ssss")
                .addHeader("X-Requested-With", "XMLHttpRequest")
                .build();
        Call call = client.newCall(request);
        Response response = call.execute();
        System.out.println(response.body().string());
    }

    private static String getParams(Map<String, String> params) {
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
        }
        return sb.toString().substring(0, sb.length() - 1);
    }
}

2. 使用Kotlin语言实现

import java.io.IOException
import okhttp3.*
import java.util.HashMap

class CoocNet {
    private val URL = "http://172.30.9.250:10000/portal_ylsy/login.do"

    fun coocnet(usename: String, ip: String) {
        val data = HashMap<String, String>()
        data["timeout"] = "5000"
        data["piresunalw"] = ip
        data["picanalw"] = ""
        data["camresuanlw"] = "2c:48:81:6c:a1:1d"
        data["pisab"] = ""
        data["portalssid"] = "YLU-Living"
        data["servicetype"] = "0"
        data["macautologin"] = "nomacAuto"
        data["schoolN"] = usename
        data["schoolP"] = "sssss"

        val sss = "http://172.30.9.250:10000/portal_ylsy/portal_ylsy/loginpage/login.jsp?wlanuserip=" + ip + "&wlanacip=&basip=&wlanusermac=2c:48:81:6c:a1:1d&portalssid=YLU-Living"

        val client = OkHttpClient()
        val body = RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"), getParams(data))
        val request = Request.Builder()
                .url(URL)
                .post(body)
                .addHeader("Accept", "*/*")
                .addHeader("Accept-Encoding", "gzip, deflate")
                .addHeader("Accept-Language", "zh-CN,zh;q=0.9")
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .addHeader("Host", "172.30.9.250:10000")
                .addHeader("Content-Length", "646")
                .addHeader("Connection", "keep-al ive")
                .addHeader("Origin", "http://172.30.9.250:10000")
                .addHeader("Referer", sss)
                .addHeader("User-Agent", "ssss")
                .addHeader("X-Requested-With", "XMLHttpRequest")
                .build()
        val call = client.newCall(request)
        val response = call.execute()
        println(response.body()?.string())
    }

    private fun getParams(params: Map<String, String>): String {
        val sb = StringBuilder()
        for ((key, value) in params) {
            sb.append(key).append("=").append(value).append("&")
        }
        return sb.toString().substring(0, sb.length - 1)
    }
}

3. 使用Retrofit库进行封装

import retrofit2.Call
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded
import retrofit2.http.POST

interface ApiService {
    @FormUrlEncoded
    @POST("portal_ylsy/login.do")
    fun coocnet(
            @Field("timeout") timeout: String,
            @Field("piresunalw") ip: String,
            @Field("picanalw") picanalw: String,
            @Field("camresuanlw") camresuanlw: String,
            @Field("pisab") pisab: String,
            @Field("portalssid") portalssid: String,
            @Field("servicetype") servicetype: String,
            @Field("macautologin") macautologin: String,
            @Field("schoolN") usename: String,
            @Field("schoolP") schoolP: String
    ): Call<String>
}

class CoocNet {
    private val BASE_URL = "http://172.30.9.250:10000/"

    fun coocnet(usename: String, ip: String) {
        val retrofit = Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build()
        val apiService = retrofit.create(ApiService::class.java)
        val call = apiService.coocnet(
                "5000",
                ip,
                "",
                "2c:48:81:6c:a1:1d",
                "",
                "YLU-Living",
                "0",
                "nomacAuto",
                usename,
                "sssss"
        )
        call.enqueue(object : retrofit2.Callback<String> {
            override fun onResponse(call: Call<String>, response: retrofit2.Response<String>) {
                println(response.body())
            }

            override fun onFailure(call: Call<String>, t: Throwable) {
                println(t.message)
            }
        })
    }
}

4. 使用OkHttp库进行网络请求

import okhttp3.*
import java.io.IOException
import java.util.HashMap

class CoocNet {
    private val URL = "http://172.30.9.250:10000/portal_ylsy/login.do"

    fun coocnet(usename: String, ip: String) {
        val data = HashMap<String, String>()
        data["timeout"] = "5000"
        data["piresunalw"] = ip
        data["picanalw"] = ""
        data["camresuanlw"] = "2c:48:81:6c:a1:1d"
        data["pisab"] = ""
        data["portalssid"] = "YLU-Living"
        data["servicetype"] = "0"
        data["macautologin"] = "nomacAuto"
        data["schoolN"] = usename
        data["schoolP"] = "sssss"

        val sss = "http://172.30.9.250:10000/portal_ylsy/portal_ylsy/loginpage/login.jsp?wlanuserip=" + ip + "&wlanacip=&basip=&wlanusermac=2c:48:81:6c:a1:1d&portalssid=YLU-Living"

        val client = OkHttpClient()
        val body = FormBody.Builder().apply {
            data.forEach { (key, value) -> add(key, value) }
        }.build()
        val request = Request.Builder()
                .url(URL)
                .post(body)
                .addHeader("Accept", "*/*")
                .addHeader("Accept-Encoding", "gzip, deflate")
                .addHeader("Accept-Language", "zh-CN,zh;q=0.9")
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .addHeader("Host", "172.30.9.250:10000")
                .addHeader("Content-Length", "646")
                .addHeader("Connection", "keep-al ive")
                .addHeader("Origin", "http://172.30.9.250:10000")
                .addHeader("Referer", sss)
                .addHeader("User-Agent", "ssss")
                .addHeader("X-Requested-With", "XMLHttpRequest")
                .build()
        val call = client.newCall(request)
        call.enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                println(e.message)
            }

            override fun onResponse(call: Call, response: Response) {
                println(response.body()?.string())
            }
        })
    }
}

5. 使用Volley库进行网络请求

import android.app.Activity;
import android.content.Context;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import java.util.HashMap;
import java.util.Map;

public class CoocNet {
    private static final String URL = "http://172.30.9.250:10000/portal_ylsy/login.do";

    public static void coocnet(Activity activity, String usename, String ip) {
        RequestQueue queue = Volley.newRequestQueue(activity);
        StringRequest stringRequest = new StringRequest(Request.Method.POST, URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        System.out.println(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        System.out.println(error.getMessage());
                    }
                }) {
            @Override
            protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("timeout", "5000");
                params.put("piresunalw", ip);
                params.put("picanalw", "");
                params.put("camresuanlw", "2c:48:81:6c:a1:1d");
                params.put("pisab", "");
                params.put("portalssid", "YLU-Living");
                params.put("servicetype", "0");
                params.put("macautologin", "nomacAuto");
                params.put("schoolN", usename);
                params.put("schoolP", "sssss");
                return params;
            }

            @Override
            public Map<String, String> getHeaders() throws com.android.volley.AuthFailureError {
                Map<String, String> headers = new HashMap<>();
                headers.put("Accept", "*/*");
                headers.put("Accept-Encoding", "gzip, deflate");
                headers.put("Accept-Language", "zh-CN,zh;q=0.9");
                headers.put("Content-Type", "application/x-www-form-urlencoded");
                headers.put("Host", "172.30.9.250:10000");
                headers.put("Content-Length", "646");
                headers.put("Connection", "keep-al ive");
                headers.put("Origin", "http://172.30.9.250:10000");
                headers.put("Referer", "http://172.30.9.250:10000/portal_ylsy/portal_ylsy/loginpage/login.jsp?wlanuserip=" + ip + "&wlanacip=&basip=&wlanusermac=2c:48:81:6c:a1:1d&portalssid=YLU-Living");
                headers.put("User-Agent", "ssss");
                headers.put("X-Requested-With", "XMLHttpRequest");
                return headers;
            }
        };
        queue.add(stringRequest);
    }
}

以上代码只是示例,需要根据实际情况进行修改。您可以选择最适合您的方法,并根据您的需求进行调整。

Android Studio 实现网络请求 - 5种方法

原文地址: https://www.cveoy.top/t/topic/m8b9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录