调用API

无论什么开发都有可能接触到API的调用
这里我就讲一件Android开发中如何调用

🚀第一步:配置权限

android.permission.INTERNET
允许程序打开网络套接字(Allowsapplications to open network sockets)

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>
🚀第二步:编写工具类(获取网络数据)

HttpUtils.java

package com.example.constellation.util;

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

public class HttpUtils {
    //获取网络数据
    public static String getJSON(String path){
        String json="";
        try {
            //将数据转为url对象
            URL url= new URL(path);
            //获取网络连接对象
            HttpURLConnection conn=(HttpURLConnection)url.openConnection();
            //开始连接
            conn.connect();
            //读取输入流内容
            InputStream is=conn.getInputStream();
            //读取流
            int hasRead=0;
            byte[]buf =new byte[1024];
            ByteArrayOutputStream bos=new ByteArrayOutputStream();
            //循环读取
            while (true){
                hasRead=is.read(buf);
                if(hasRead==-1){
                    break;
                }
                bos.write(buf,0,hasRead);
            }
            is.close();
            json=bos.toString();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  json;
    }
}

🚀第三步:编写接口类(调用api的接口)

URLContent.java

package com.example.constellation.util;
import java.net.URLEncoder;

public class URLContent {
    //星座配对接口
    public static String getParnterURL(){
        String url="接口路径";
        return url;
    }
}
🚀第四步:编写AsyncTask<参数类型,进度,返回类型>,获取数据的过程中会弹出加载动画

asynctask是Android中的一个自带的轻量级异步类,通过他可以轻松的实现工作线程和UI线程之间的通信和线程切换(其实也只能在工作和ui线程之间切换,稍后会提到)

LoadDataAsyncTask.java 继承AsyncTask

package com.example.constellation.util;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;

public class LoadDataAsyncTask extends AsyncTask<String,Void,String> {
    Context context;
    onGetNetDataListener listener;
    ProgressDialog dialog;
    boolean flag=false;
    private void initDialog(){
        dialog=new ProgressDialog(context);
        dialog.setTitle("提示信息");
        dialog.setMessage("正在加载中....");
    }
    public LoadDataAsyncTask(Context context, onGetNetDataListener listener,boolean flag) {
        this.context = context;
        this.listener = listener;
        this.flag=flag;
        initDialog();
    }

    //获取网络数据接口
    public interface onGetNetDataListener{
        public void onSucess(String json);
    }

    //运行在子线程中,进行耗时操作等逻辑
    @Override
    protected String doInBackground(String... params) {
        String json=HttpUtils.getJSON(params[0]);
        return json;
    }
    //运行主线程中,通常用来进行控件的初始化
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        if(flag){
            dialog.show();
        }
    }
    //运行在主线程中,用来获取doInBackground的返回数据,还可以进行控件更新
    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        if(flag){
            dialog.dismiss();   //返回数据了就要取消提示
        }
        listener.onSucess(s);
    }
}

🚀第五步:加载网络数据
/**
         * 加载网络数据
         */
        //创建自定义异步任务对象
        LoadDataAsyncTask task=new LoadDataAsyncTask(this,this,true);
        //执行异步任务
        task.execute("api路径");
🚀第六步:获取返回的信息
//得到信息后执行此方法
@Override
    public void onSucess(String json) {
        //解析数据
        if(!TextUtils.isEmpty(json)){
          // json即返回的json数据
        //可以创建对应的实体类进行接收...
        }
    }

这样就🆗了,Android开发中调用api的方案之一就完成了
如有需要可以保存此文章,方便Ctrl+C,Ctrl+V😄

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐