URL
通俗点说,在3W上每一种资源都有一个统一的地址,这个地址就叫URL(Uniform Resource Locator)
JAVA URL
使用java中java.net.URL类和java.net.URLConnection类可以比较方便的进行网络通信。
import java.io.*; import java.net.*; public class URLTest { public static void main(String args[]) { try { URL u1=new URL("http://mil.news.sohu.com/"); System.out.println(u1.getProtocol()); System.out.println(u1.getHost()); System.out.println(u1.getPort()); System.out.println(u1.getFile()); } catch(MalformedURLException e) { System.out.println(e); } catch(IOException ee) { System.out.println(ee); } catch(Exception eee) { System.out.println(eee); } } }
安卓网络图片加载
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/myImageView1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" /> </LinearLayout>
LoadPicture
加载网络图片有其他高级的用法,和一些库,本文主要是讲URL,用最普通的方式,参考一些开源代码
public class LoadPictrue { private String uri; private ImageView imageView; private byte[] picByte; public void getPicture(String uri,ImageView imageView){ this.uri = uri; this.imageView = imageView; new Thread(runnable).start(); } @SuppressLint("HandlerLeak") Handler handle = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 1) { if (picByte != null) { Bitmap bitmap = BitmapFactory.decodeByteArray(picByte, 0, picByte.length); imageView.setImageBitmap(bitmap); } } } }; Runnable runnable = new Runnable() { @Override public void run() { try { URL url = new URL(uri); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setReadTimeout(10000); if (conn.getResponseCode() == 200) { InputStream fis = conn.getInputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] bytes = new byte[1024]; int length = -1; while ((length = fis.read(bytes)) != -1) { bos.write(bytes, 0, length); } picByte = bos.toByteArray(); bos.close(); fis.close(); Message message = new Message(); message.what = 1; handle.sendMessage(message); } }catch (IOException e) { e.printStackTrace(); } } }; }
MainActivity
public static final String picUrl = "https://www.baidu.com/img/bdlogo.png"; String url; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = (Button)findViewById(R.id.myButton); final TextView tv = (TextView)findViewById(R.id.myEditText); final ImageView iv = (ImageView)findViewById(R.id.myImageView); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (TextUtils.isEmpty(tv.getText())){ url = picUrl; } else{ url = tv.getText().toString(); } new NormalLoadPictrue().getPicture(url,iv); } }); }
要点
要熟悉字节流和字符的转换,stream和reader的区别
注意网络异常的处理顺序
使用消息机制,不要堵塞主线程