栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android开发中教你如何调用API

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android开发中教你如何调用API

调用API

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

第一步:配置权限

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

AndroidManifest.xml


第二步:编写工具类(获取网络数据)

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 {
    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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749049.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号