安卓--请求接口

1.引入gradle


    //请求
    implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.10.0'
    implementation 'com.google.code.gson:gson:2.8.5'

2.封装请求类

package com.example.httpapplication.api;

import static android.content.Context.MODE_PRIVATE;

import android.content.Context;
import android.content.SharedPreferences;

import com.example.httpapplication.Utils.StringUtils;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
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 Api {
    private static String reequestUrl;
    private static OkHttpClient okHttpClient;
    private static  HashMap<String,Object> mparams;
    public static Api api=new Api();
    public Api(){};
    public static Api config(String url, HashMap<String,Object> params){
        //1.创建OkHttpClient
        okHttpClient=new OkHttpClient.Builder().build();

        reequestUrl=AppConfig.BASE_URL+url;
        mparams=params;
        return  api;
    }
//    封装的POST请求
    public  void postRequest(TtitCallback callback){
        JSONObject jsonObject=new JSONObject(mparams);
        String jsonstr=jsonObject.toString();
        String Content_Type="application/json;charset=utf-8";
        RequestBody requestBodyJson=RequestBody.create(MediaType.parse(Content_Type),jsonstr);
//        2.创建request
        Request request=new Request.Builder()
                .url(reequestUrl)
                .addHeader("contentType", "application/json;charset=UTF-8")
                .post(requestBodyJson)
                .build();
//        3.创建call回调对象
        final Call call=okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //请求失败
                callback.onFailure(e);
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String result=response.body().string();
                callback.onSuccess(result);
            }
        });
    }
//    封装的GET请求
    public void getRequest(Context context, final TtitCallback callback) {
        SharedPreferences sp = context.getSharedPreferences("sp_ttit", MODE_PRIVATE);
        String token = sp.getString("token", "");
        String url = getAppendUrl(reequestUrl, mparams);
        Request request = new Request.Builder()
                .url(url)
                .addHeader("token", token)
                .get()
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                callback.onFailure(e);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String result = response.body().string();
                try {
                    JSONObject jsonObject = new JSONObject(result);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                callback.onSuccess(result);
            }
        });
    }

    private static String getAppendUrl(String reequestUrl, HashMap<String, Object> mparams) {
        if(mparams!=null&&!mparams.isEmpty()){
            StringBuilder stringBuilder=new StringBuilder();
            Iterator<Map.Entry<String,Object>> interactor=mparams.entrySet().iterator();
            while (interactor.hasNext()){
                Map.Entry<String,Object> entry=interactor.next();
                if(StringUtils.isEmpty(stringBuilder.toString())){
                    stringBuilder.append("?");
                }else{
                    stringBuilder.append("&");
                }
                stringBuilder.append(entry.getKey()).append("=").append(entry.getValue());
            }
            reequestUrl+=stringBuilder.toString();
        }
        return reequestUrl;
    }
}

3.存放接口名

/**
 *
 **/
public class AppConfig {
    public static final String BASE_URL="http://192.168.0.104:8888/api";
    public static final String login="/login";
    public static final String register="/register";

    public static final String getVideoType="/getVideoType";
    public static final String getVideoList="/getVideoList";
    public static final String getiNews="/getiNews";
}

4.请求结果回调函数

/**
 *
 **/
public interface TtitCallback {
    void onSuccess(String res);
    void onFailure(Exception e);
}

5.返回结果实体类


import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 *
 **/
public class ResponseApi implements Serializable {
    private int code;
    private String mag;
    private List<Map<String,Object>> data;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMag() {
        return mag;
    }

    public void setMag(String mag) {
        this.mag = mag;
    }

    public List<Map<String,Object>> getData() {
        return data;
    }

    public void setData(List<Map<String,Object>> data1) {
        this.data = data1;
    }

    @Override
    public String toString() {
        return "VideoListResponse{" +
                "code=" + code +
                ", mag='" + mag + '\'' +
                ", data1=" + data +
                '}';
    }
}

6.使用请求结果界面

package com.example.httpapplication;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import com.example.httpapplication.api.Api;
import com.example.httpapplication.api.AppConfig;
import com.example.httpapplication.api.TtitCallback;
import com.example.httpapplication.entity.ResponseApi;
import com.example.httpapplication.entity.VideoInfo;
import com.example.httpapplication.entity.VideoInfo;
import com.google.gson.Gson;
import com.google.gson.JsonObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private String TAG="首页";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getVideoList();
    }

    private Handler mhandler=new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            //放在这里面就在UI朱线程里面执行
            switch (msg.what){
                case 0:
//                    渲染数据
//                    videoAdapter.setDatas(list);
//                    videoAdapter.notifyDataSetChanged();//通知recyview刷新页面
                    break;
                case 1:

                    break;
            }
        }
    };
    private void getVideoList(){
            //参数
            HashMap<String,Object> params=new HashMap<>();
            params.put("categoryId",1);//视频分类id
            //附带参数
            HashMap<String,Object> fudaimap=new HashMap<>();
            fudaimap.put("start",0);
            fudaimap.put("end",5);
            params.put("params",fudaimap);
            //请求视频列表
            Api.config(AppConfig.getVideoList,params).postRequest(new TtitCallback() {
                @Override
                public void onSuccess(String res) {
                    Log.d(TAG, res);

                    ResponseApi responseApi=new Gson().fromJson(res,ResponseApi.class);

                    if(responseApi!=null&&responseApi.getCode()==0){
                        List<Map<String,Object>> listVideos=responseApi.getData();
                        for (int a=0;a<listVideos.size();a++){
                            Map<String,Object> hashmap= listVideos.get(a);
                            Log.d(TAG, hashmap.get("author").toString());
                        }
                        mhandler.sendEmptyMessage(0);//通知去渲染界面

                    }

                }
                @Override
                public void onFailure(Exception e) {

                }
            });
    }

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,关于Android登录后台实现APP登录功能,你需要进行以下步骤: 1.在Android项目中添加网络权限 在AndroidManifest.xml文件中添加以下代码: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` 2.使用HttpURLConnection发送POST请求 可以使用HttpURLConnection类来发送POST请求,以下是一个示例代码: ```java URL url = new URL("http://yourbackend.com/login"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoInput(true); conn.setDoOutput(true); //添加请求头 conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); //添加请求体 JSONObject jsonParam = new JSONObject(); jsonParam.put("username", "yourusername"); jsonParam.put("password", "yourpassword"); OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream()); writer.write(jsonParam.toString()); writer.flush(); //读取响应 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ((line = reader.readLine()) != null) { sb.append(line); } reader.close(); String response = sb.toString(); ``` 3.解析后台返回的数据 在上面的代码中,我们使用了JSONObject类来创建一个JSON请求体。在得到后台返回的数据后,你需要使用相应的JSON解析器来解析返回的数据。例如,可以使用GSON库来解析JSON数据: ```java Gson gson = new Gson(); LoginResponse response = gson.fromJson(sb.toString(), LoginResponse.class); ``` 其中,LoginResponse是一个你自己定义的Java类,用来表示后台返回的数据。你需要根据后台返回的数据来定义这个类的属性。 以上就是实现Android登录后台的基本步骤,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞飞翼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值