注:a:所有网络请求的module必须在清单文件中添加访问网络权限。
b:请求网络数据的耗时操作的代码必须在子线程中完成,所以子线程请求完数据更新主线程中Ui控件必须Thread+Handler完成。
更新ui部分代码如下(MainActivity
):
package com.example.httpuriconnection; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.google.gson.Gson; import java.util.List; public class MainActivity extends AppCompatActivity { private String Jsondata = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1"; private String imagedata = "https://img-my.csdn.net/uploads/201407/26/1406383265_8550.jpg"; private TextView text; private ImageView image; private ListView listview; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 1) { String Json = (String) msg.obj; Gson gson = new Gson(); Bean bean = gson.fromJson(Json, Bean.class); String info = bean.getInfo(); int status = bean.getStatus(); List<Bean.DataBean> data = bean.getData(); MyAdapter myAdapter = new MyAdapter(data, MainActivity.this); listview.setAdapter(myAdapter); } else if (msg.what == 2) { Bitmap obj = (Bitmap) msg.obj; image.setImageBitmap(obj); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (TextView) findViewById(R.id.getdata); image = (ImageView) findViewById(R.id.image); listview = (ListView) findViewById(R.id.listview); } //获取新闻Json数据 public void getdatas(View v) { //Toast.makeText(MainActivity.this,"获取新闻Json数据",Toast.LENGTH_SHORT).show(); new Thread(new Runnable() { @Override public void run() { String json = UriNetTools.getJson(Jsondata); Message message = Message.obtain(); message.obj = json; message.what = 1; handler.sendMessage(message); } }).start(); } //获取图片资源 public void images(View v) { //Toast.makeText(MainActivity.this, "获取图片资源", Toast.LENGTH_SHORT).show(); new Thread(new Runnable() { @Override public void run() { Bitmap getimage = UriNetTools.getimage(imagedata); Message message = Message.obtain(); message.obj = getimage; message.what = 2; handler.sendMessage(message); } }).start(); } }
请求数据代码如下(工具类):
package com.example.httpuriconnection; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; /** * author:Created by GengShiCong on 2017/9/27. */ public class UriNetTools { //获取网络数据 public static String getJson(String uristring) { try { URL url = new URL(uristring); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.setConnectTimeout(8000); InputStream inputStream = urlConnection.getInputStream(); StringBuilder stringBuilder = new StringBuilder(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String string = ""; while ((string = bufferedReader.readLine()) != null) { stringBuilder.append(string); } return stringBuilder.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ""; } //获取网络图片 public static Bitmap getimage(String uristring) { try { URL url = new URL(uristring); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); int responseCode = urlConnection.getResponseCode(); if (responseCode == 200) { InputStream inputStream = urlConnection.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); return bitmap; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } }