今日头条

来源:互联网 发布:新媒体运营网络课程 编辑:程序博客网 时间:2024/04/28 02:12
package com.example.a02_httpurlconnnection_newstop_03;


import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;


import com.example.a02_httpurlconnnection_newstop_03.adapter.MyAdapter;
import com.example.a02_httpurlconnnection_newstop_03.bean.DataBean;
import com.example.a02_httpurlconnnection_newstop_03.bean.DataResultBean;
import com.google.gson.Gson;


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;


public class MainActivity extends AppCompatActivity {


    private ListView listView;


    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //接收数据...设置适配器
            if (msg.what == 0){
                DataBean dataBean = (DataBean) msg.obj;


                list = dataBean.getResult().getData();


                //设置适配器


                MyAdapter myAdapter = new MyAdapter(list, MainActivity.this);
                listView.setAdapter(myAdapter);
            }


        }
    };
    private List<DataResultBean> list;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        listView = (ListView) findViewById(R.id.list_view);
        //条目的点击事件
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                //传值过去...url路径
                if (list != null){
                    Intent intent = new Intent(MainActivity.this,WebActivity.class);


                    intent.putExtra("url",list.get(i).getUrl());
                    startActivity(intent);
                }
            }
        });


    }


    public void getTop(View view){


        //点击获取网络数据之前,判断一下网络是否可用...不可用,设置
        if (isNetConnected()){
            getNetData();


        }else {
            //对话框
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);


            builder.setTitle("警告");
            builder.setMessage("网络不可用,是否设置?");


            builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    //Settings.ACTION_WIRELESS_SETTINGS
                    //Settings.ACTION_WIFI_SETTINGS
                    Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
                    startActivity(intent);
                }
            });
            builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {


                }
            });


            builder.show();


        }


    }


    /**
     * 判断网络是否可用
     *
     * boolean
     */
    private boolean isNetConnected(){
        //1.获取一个连接管理对象
        ConnectivityManager manager = (ConnectivityManager) MainActivity.this.getSystemService(Context.CONNECTIVITY_SERVICE);


        //2.获取网络连接的信息
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();


        if (networkInfo != null){
            //返回值就代表网络是否可用
            return networkInfo.isAvailable();
        }


        return false;
    }


    /**
     * 获取头条的数据
     */
    private void getNetData() {
        new Thread(){
            @Override
            public void run() {
                //头条服务器地址
                String path = "http://v.juhe.cn/toutiao/index";


                try {
                    URL url = new URL(path);


                    //打开连接
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    //设置
                    connection.setRequestMethod("POST");
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);


                    //post方式要提交参数给服务器...以流的方式提交给服务器
                    connection.setDoOutput(true);
                    //设置请求参数的类型
                    connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");


                    String params = "type=top&key=597b4f9dcb50e051fd725a9ec54d6653";
                    //参数以流的形式写给服务器...字节数组的形式写出去
                    connection.getOutputStream().write(params.getBytes());


                    //响应
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200){
                        //获取输入字节流
                        InputStream inputStream = connection.getInputStream();


                        String json = streamToString(inputStream,"utf-8");


                        Log.i("json",json);
                        //解析...解析完成之后发送到主线程,设置适配器
                        Gson gson = new Gson();
                        DataBean dataBean = gson.fromJson(json, DataBean.class);


                        //发送出去
                        Message message = Message.obtain();
                        message.what = 0;
                        message.obj = dataBean;
                        handler.sendMessage(message);
                    }




                } catch (Exception e) {
                    e.printStackTrace();
                }




            }
        }.start();
    }


    private String streamToString(InputStream inputStream,String charset) {
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset);


            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String s = null;
            StringBuilder builder = new StringBuilder();
            while ((s = bufferedReader.readLine()) != null){
                builder.append(s);
            }


            bufferedReader.close();
            return builder.toString();


        } catch (Exception e) {
            e.printStackTrace();
        }


        return  null;
    }

}



package com.example.a02_httpurlconnnection_newstop_03;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class WebActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.web_layout);


        WebView webView = (WebView) findViewById(R.id.web_view);


        Intent intent = getIntent();
        String url = intent.getStringExtra("url");


        //加载
        webView.loadUrl(url);


        //设置
        webView.setWebViewClient(new WebViewClient());


        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
    }
}



package com.example.a02_httpurlconnnection_newstop_03.adapter;


import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;


import com.example.a02_httpurlconnnection_newstop_03.R;
import com.example.a02_httpurlconnnection_newstop_03.bean.DataResultBean;
import com.example.a02_httpurlconnnection_newstop_03.util.ImageUtil;


import java.util.List;


public class MyAdapter extends BaseAdapter {
    List<DataResultBean> list;
    Context context;


    public MyAdapter(List<DataResultBean> list, Context context) {
        this.list = list;
        this.context = context;
    }


    @Override
    public int getCount() {
        return list.size();
    }


    @Override
    public Object getItem(int i) {
        return list.get(i);
    }


    @Override
    public long getItemId(int i) {
        return i;
    }


    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder;
        if (view == null){
            view = View.inflate(context, R.layout.item_layout,null);
            holder = new ViewHolder();


            holder.img_01 = view.findViewById(R.id.img_01);
            holder.img_02 = view.findViewById(R.id.img_02);
            holder.img_03 = view.findViewById(R.id.img_03);
            holder.text_author = view.findViewById(R.id.text_author);
            holder.text_title = view.findViewById(R.id.text_title);
            holder.text_time = view.findViewById(R.id.text_time);


            view.setTag(holder);
        }else {
            holder = (ViewHolder) view.getTag();
        }


        //赋值
        holder.text_author.setText(list.get(i).getAuthor_name());
        holder.text_title.setText(list.get(i).getTitle());
        holder.text_time.setText(list.get(i).getDate());


        //图片去加载
        new ImageUtil().getImage(list.get(i).getThumbnail_pic_s(),holder.img_01);
        new ImageUtil().getImage(list.get(i).getThumbnail_pic_s02(),holder.img_02);
        new ImageUtil().getImage(list.get(i).getThumbnail_pic_s03(),holder.img_03);


        return view;
    }


    class ViewHolder{
        TextView text_title;
        TextView text_author;
        TextView text_time;
        ImageView img_01;
        ImageView img_02;
        ImageView img_03;
    }
}



package com.example.a02_httpurlconnnection_newstop_03.bean;


public class DataBean {
    private  int error_code;
    private String reason;
    private  ResultBean result;


    public DataBean(int error_code, String reason, ResultBean result) {
        this.error_code = error_code;
        this.reason = reason;
        this.result = result;
    }


    public int getError_code() {
        return error_code;
    }


    public void setError_code(int error_code) {
        this.error_code = error_code;
    }


    public String getReason() {
        return reason;
    }


    public void setReason(String reason) {
        this.reason = reason;
    }


    public ResultBean getResult() {
        return result;
    }


    public void setResult(ResultBean result) {
        this.result = result;
    }
}


package com.example.a02_httpurlconnnection_newstop_03.bean;


public class DataResultBean {
    /**
     * "author_name": "高峰军事观察",
     "category": "头条",
     "date": "2017-08-30 15:00",
     "thumbnail_pic_s": "http://00.imgmini.eastday.com/mobile/20170830/20170830_129326f50ef4abd54e97536902dac076_mwpm_03200403.png",
     "thumbnail_pic_s02": "http://00.imgmini.eastday.com/mobile/20170830/20170830_94ba2573292b44b48757f573e792afcb_mwpm_03200403.png",
     "thumbnail_pic_s03": "http://00.imgmini.eastday.com/mobile/20170830/20170830_059bf1a9ed8ae27bed032e3648f169d1_mwpm_03200403.png",
     "title": "土耳其还真翻脸向美联军开火了,报了被美军临阵羞辱的一箭之仇",
     "uniquekey": "25c083ff2c73bbb51beec89a37f138ea",
     "url": "http://mini.eastday.com/mobile/170830150031866.html"
     */
    private String author_name;
    private String category;
    private String date;
    private String thumbnail_pic_s;
    private String thumbnail_pic_s02;
    private String thumbnail_pic_s03;
    private String title;
    private String uniquekey;
    private String url;


    public DataResultBean(String author_name, String category, String date, String thumbnail_pic_s, String thumbnail_pic_s02, String title, String thumbnail_pic_s03, String uniquekey, String url) {
        this.author_name = author_name;
        this.category = category;
        this.date = date;
        this.thumbnail_pic_s = thumbnail_pic_s;
        this.thumbnail_pic_s02 = thumbnail_pic_s02;
        this.title = title;
        this.thumbnail_pic_s03 = thumbnail_pic_s03;
        this.uniquekey = uniquekey;
        this.url = url;
    }


    public String getAuthor_name() {
        return author_name;
    }


    public void setAuthor_name(String author_name) {
        this.author_name = author_name;
    }


    public String getCategory() {
        return category;
    }


    public void setCategory(String category) {
        this.category = category;
    }


    public String getDate() {
        return date;
    }


    public void setDate(String date) {
        this.date = date;
    }


    public String getThumbnail_pic_s() {
        return thumbnail_pic_s;
    }


    public void setThumbnail_pic_s(String thumbnail_pic_s) {
        this.thumbnail_pic_s = thumbnail_pic_s;
    }


    public String getThumbnail_pic_s02() {
        return thumbnail_pic_s02;
    }


    public void setThumbnail_pic_s02(String thumbnail_pic_s02) {
        this.thumbnail_pic_s02 = thumbnail_pic_s02;
    }


    public String getThumbnail_pic_s03() {
        return thumbnail_pic_s03;
    }


    public void setThumbnail_pic_s03(String thumbnail_pic_s03) {
        this.thumbnail_pic_s03 = thumbnail_pic_s03;
    }


    public String getTitle() {
        return title;
    }


    public void setTitle(String title) {
        this.title = title;
    }


    public String getUniquekey() {
        return uniquekey;
    }


    public void setUniquekey(String uniquekey) {
        this.uniquekey = uniquekey;
    }


    public String getUrl() {
        return url;
    }


    public void setUrl(String url) {
        this.url = url;
    }
}



package com.example.a02_httpurlconnnection_newstop_03.bean;


import java.util.List;


public class ResultBean {
    private List<DataResultBean> data;


    public List<DataResultBean> getData() {
        return data;
    }


    public void setData(List<DataResultBean> data) {
        this.data = data;
    }


    public ResultBean(List<DataResultBean> data) {


        this.data = data;
    }
}




package com.example.a02_httpurlconnnection_newstop_03.util;


import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;


import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;


public class ImageUtil {
    ImageView imageView;


    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 0){
                Bitmap bitmap = (Bitmap) msg.obj;
                imageView.setImageBitmap(bitmap);
            }
        }
    };






    /**
     * 给imageView控件加载图片
     */
    public void getImage(final String path, ImageView imageView){
        this.imageView = imageView;


        new Thread(){
            @Override
            public void run() {
                try {
                    URL url = new URL(path);


                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();


                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);


                    //响应的状态码
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200){
                        InputStream inputStream = connection.getInputStream();


                        //转为bitmap
                        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);


                        Message message = Message.obtain();
                        message.what = 0;
                        message.obj = bitmap;
                        handler.sendMessage(message);
                    }


                } catch (Exception e) {
                    e.printStackTrace();
                }


            }
        }.start();


    }
}



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <Button
        android:onClick="getTop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="获取新闻头条" />


    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>
</LinearLayout>



<?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"
    android:orientation="vertical">


    <TextView
        android:id="@+id/text_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <ImageView
            android:id="@+id/img_01"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="100dp" />
        <ImageView
            android:id="@+id/img_02"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="100dp" />
        <ImageView
            android:id="@+id/img_03"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="100dp" />


    </LinearLayout>


    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/text_author"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/text_time"
            />
    </LinearLayout>


</LinearLayout>


<?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">


    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


    </WebView>


</LinearLayout>


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.a02_httpurlconnnection_newstop_03">


    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


        <activity android:name=".WebActivity"/>
    </application>


</manifest>