ImagerLoader左边加载图片右边加载文字



//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>

相关文章:

  • 2021-11-04
  • 2019-08-13
  • 2021-12-01
  • 2021-11-04
  • 2021-10-19
  • 2021-12-29
  • 2021-10-15
  • 2021-10-02
猜你喜欢
  • 2021-11-06
  • 2021-09-17
  • 2021-10-15
  • 2021-12-15
  • 2021-08-07
  • 2021-12-01
  • 2021-12-01
  • 2021-09-28
相关资源
相似解决方案