无论什么开发都有可能接触到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;
}
}
URLContent.java
package com.example.constellation.util;
import java.net.URLEncoder;
public class URLContent {
//星座配对接口
public static String getParnterURL(){
String url="接口路径";
return url;
}
}
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