目录
一、背景
本文章是针对新大陆物联网竞赛,其中Android开发的相关知识的总结与试验。本文主要通过Android程序与新大陆物联网端的通信,使用多线程下载新大陆Logo。
软件需求:Android Studio
二、思路与实施
(本文章代码将在文章末尾免费提供)
权限配置:
本文涉及到网络下载,需要配置Android联网权限。
<uses-permission android:name="android.permission.INTERNET"/>
布局设计:
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="400dp"
android:src="@mipmap/ic_launcher"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="down"
android:text="下载"/>
</LinearLayout>
随后我们设计主程序:
主程序需要我们实现下载功能,下载功能需要在子线程中实现,下载后需要将资源传递至主线程,因为我们需要写一个接口用于数据传输。
接口类实现代码:
public interface Listener {
void Data(byte[] data);
}
随后我们需要写一个下载类,用于实现下载功能。
DownLoad类代码:
首先我们初始化私有对象,实现该类的构造方法,在构造方法中传入下载地址。
为了在主程序中能及时收到下载的图片,我们需要在类中设置监听器。
private Listener listener;
public void setListener(Listener listener)
{
this.listener=listener;
}
随后,我们需要在主程序中初始化Imageview对象,并设置好监听器。
private DownLoad downLoad;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView) findViewById(R.id.image);
}
public void down(View view) {
downLoad=new DownLoad("http://api.nlecloud.com/images/nlogo_blue_s.png");
downLoad.setListener(new Listener() {
@Override
public void Data(byte[] data) {
imageView.setImageBitmap(BitmapFactory.decodeByteArray(data,0,data.length));
}
});
downLoad.Down();
}
可以看出,上边的程序调用了类中的Public下载方法,下面我们在类中实现这个方法。
至此,功能就实现啦。看效果图:
三、文章总结
本文主要使用了HttpUrlConnection类&URL类,并结合了GET&POST以及多线程的知识,这里暂时并没有用到异步任务,文章比较简单,可以说是必学知识点。