//main方法
import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.google.gson.Gson; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.ssl.AllowAllHostnameVerifier; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONException; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private ListView lv; private TextView tv; private List<String> datas = new ArrayList<String>(); private List<News> newDatas; private int index = 0; private Handler myHandler = new Handler() { @Override public void handleMessage(Message msg) { tv.setText(datas.get(index % datas.size())); index++; //延迟3秒再次发送消息 sendEmptyMessageDelayed(1, 3000); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); tv = (TextView) findViewById(R.id.tv_news); //开启一个子线程 new Thread() { @Override public void run() { try { //1.创建URl URL url = new URL("http://www.toutiao.com/hot_words/"); //2.打开连接,进行请求 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //3.设置 connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); //4.判断响应码 if (connection.getResponseCode() == 200) { //5.得到返回结果 InputStream stream = connection.getInputStream(); //将流转换成字符串 String str = streamToString(stream); //进行解析 getJsonDara(str); //发送空消息给Handle myHandler.sendEmptyMessage(1); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }.start(); MyTask myTask = new MyTask(); myTask.execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=1"); } private String streamToString(InputStream inputStream) { StringBuilder builder = new StringBuilder(); try { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8")); String con; while ((con = bufferedReader.readLine()) != null) { builder.append(con); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return builder.toString(); } private void getJsonDara(String str) { try { //Gson 原生解析 JSONArray array = new JSONArray(str); for (int i = 0; i < array.length(); i++) { String data = array.optString(i); datas.add(data); } } catch (JSONException e) { e.printStackTrace(); } } class MyTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { //因为请求的是https协议的网址,eclipse下使用HttpGet请求会报错,需要添加以下这行代码 SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier()); //1.创建httpClient HttpClient htttpClient = new DefaultHttpClient(); //2.创建httpget HttpGet httpGet = new HttpGet(params[0]); try { //3.执行请求 HttpResponse response = htttpClient.execute(httpGet); //4.判断响应吗 if (response.getStatusLine().getStatusCode() == 200) { //5得到结果 HttpEntity entity = response.getEntity(); //6.将结果转换为String return EntityUtils.toString(entity); } } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Log.i("zzz", s); //使用gson 进行解析 Gson gson = new Gson(); Result result = gson.fromJson(s, Result.class); Log.d("zzz", result.toString()); newDatas = result.getNewslist(); Log.i("zzz", newDatas.toString()); //显在listView列表 lv.setAdapter(new MyAdapter()); } } class MyAdapter extends BaseAdapter { @Override public int getCount() { return newDatas.size(); } @Override public Object getItem(int position) { return newDatas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = View.inflate(MainActivity.this, R.layout.layout, null); holder = new ViewHolder(); holder.tvTitle = (TextView) convertView.findViewById(R.id.tv_title); holder.tvData = (TextView) convertView.findViewById(R.id.tv_date); holder.imageView = (ImageView) convertView.findViewById(R.id.img); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tvTitle.setText(newDatas.get(position).getTitle()); holder.tvData.setText(newDatas.get(position).getCtime()); if (newDatas.get(position).getPicUrl() != null) { //给img设置tag,具有唯一性;图片的url -url有时是相同的,所以tag的值最好改为position holder.imageView.setTag(newDatas.get(position).getPicUrl()); //图片使用异步加载 MyPicTask myPicTask = new MyPicTask(holder.imageView); myPicTask.execute(newDatas.get(position).getPicUrl()); } Log.i("zzz", newDatas.get(position).getTitle()); return convertView; } class ViewHolder { TextView tvTitle; TextView tvData; ImageView imageView; } } class MyPicTask extends AsyncTask<String, Void, Bitmap> { private ImageView imageView; String sss; public MyPicTask(ImageView imageView) { this.imageView = imageView; } @Override protected Bitmap doInBackground(String... params) { Bitmap bitmap = null; try { sss = params[0]; //1.创建url对象 URL url = new URL(params[0]); //2.打开连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //3.设置 connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); connection.setConnectTimeout(5000); //4.得到结果码,并且判断 int code = connection.getResponseCode(); if (code == 200) { //5.得到结果 InputStream inputStream = connection.getInputStream(); //将流转换成Bitmap对象 bitmap = BitmapFactory.decodeStream(inputStream); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return bitmap; } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if (bitmap != null) { String tag = (String) imageView.getTag(); if (tag.equals(sss)) { //显示图片 imageView.setImageBitmap(bitmap); } } } } }
//BeanGson解析
public class News { private String title; private String ctime; private String picUrl; public String getTitle() { return title; } public String getCtime() { return ctime; } public String getPicUrl() { return picUrl; } @Override public String toString() { return "News{" + "title='" + title + '\'' + ", ctime='" + ctime + '\'' + ", picUrl='" + picUrl + '\'' + '}'; } }
package com.example.aplew; import java.util.List; /** * Created by 知足 on 2017/10/11. */ public class Result { private List<News> newslist; public List<News> getNewslist() { return newslist; } @Override public String toString() { return "Result{" + "newslist=" + newslist + '}'; } }
//activity-main
<?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" tools:context="com.example.aplew.MainActivity" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="dfdfdfd" android:textSize="30dp" android:gravity="center" android:id="@+id/tv_news" /> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lv" /> </LinearLayout> //layout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="150px" android:layout_height="150px" android:id="@+id/img" android:src="@mipmap/ic_launcher" /> <LinearLayout android:layout_marginTop="20dp" android:layout_marginLeft="50dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_title" android:text="dsifjdifdj" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_date" android:text="dsifjdifdj" /> </LinearLayout> </LinearLayout>
//要加的权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>