MainActivity
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class RequestImageActivity extends AppCompatActivity {
private EditText input;
private Button load;
private ImageView image;
//更新 ui 的what
private final int UPDATE_UI = 1;
@SuppressLint("HandlerLeak") private Handler mHandler = new Handler(new Handler.Callback() {
@Override public boolean handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_UI:
//string
//bitmap
image.setImageBitmap((Bitmap) msg.obj);
//image.setImageResource();
break;
}
return true;
}
})/*{
@Override public void handleMessage(Message msg) {
super.handleMessage(msg);
}
}*/;
/*private Thread thread = new Thread(
new Runnable() {
@Override public void run() {
}
}
){
@Override public void run() {
super.run();
}
};*/
@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image);
input = findViewById(R.id.input);
load = findViewById(R.id.load);
image = findViewById(R.id.image);
input.setText("http://pic28.photophoto.cn/20130818/0020033143720852_b.jpg");
load.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
//判断网络状态
if (!NetUtil.hasNetwork(RequestImageActivity.this)) {
Toast.makeText(RequestImageActivity.this, "没有可用的网络", Toast.LENGTH_LONG).show();
//TODO 跳转到设置
return;
}
new Thread(new Runnable() {
@Override public void run() {
requestImage(input.getText().toString());
}
}).start();
}
});
}
private void requestImage(String urlStr) {
try {
//
URL url = new URL(urlStr);
// http https
// ftp
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//http get post
urlConnection.setRequestMethod("GET");
// wifi 5
// 4g 10
//判断网络类型
boolean isMobileNetwork = NetUtil.isMobileNetwork(RequestImageActivity.this);
int timeOut;
if (isMobileNetwork) {
timeOut = 10000;
} else {
timeOut = 5000;
}
urlConnection.setConnectTimeout(timeOut);
urlConnection.setReadTimeout(timeOut);
int responseCode = urlConnection.getResponseCode();
if (responseCode == 200) {
Bitmap bitmap = BitmapFactory.decodeStream(urlConnection.getInputStream());
//更新 ui
mHandler.sendMessage(mHandler.obtainMessage(UPDATE_UI, bitmap));
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
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"
tools:context=".MainActivity"
>
<EditText
android:id="@+id/input"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="18679906337"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/load"
app:layout_constraintTop_toTopOf="parent"
/>
<Button
android:id="@+id/load"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="query"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/input"
/>
<ImageView
android:id="@+id/image"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/load"
/>
</android.support.constraint.ConstraintLayout>
工具类NetUtil.java
package com.example.day1;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetUtil {
//是否有可用的网络
public static boolean hasNetwork(Context context) {
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
//有网络设备 且设备可用
return activeNetworkInfo != null && activeNetworkInfo.isAvailable();
}
//判断是否是手机网络
public static boolean isMobileNetwork(Context context) {
//连接管理服务
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//获取到当前默认可用网络信息
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
//有网络设备 且 网络设备是手机网络
return activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE;
}
}