OkHttpClient



OkHttpClient

 OkHttpClient client = new OkHttpClient();
 Request request = new Request.Builder().url("http://m2.qiushibaike.com/article/list/suggest?page=").get().build();
 call = client.newCall(request);
 //同步请求
 //Response response = call.execute();//这个方法使用频率较低。
  call.enqueue(this);//用的比较多的是这个异步请求。


注意HttpClient 在Android6.0已经过时了。这里的OkHttpClient使用的是HttpConnection。


call.enqueue()需要回调,下面的两个方法。
一定要在非UI线程中执行。如果想要改UI,可以使用handler或者使用runOnUiThread
    @Override
    public void onFailure(Request request, IOException e) {
                
    }

    @Override
    public void onResponse(Response response) throws IOException {

    }


---------------------------------------------------------------------------------------------



package com.example.qiubai;


public class UrlUtil {


    // 专享
    public final static String URL_HOT_SUGGEST = "http://m2.qiushibaike.com/article/list/suggest?page=";
    // 视频
    public final static String URL_ETLITE_DAY = "http://m2.qiushibaike.com/article/list/video?page=";

    // 纯文
    public final static String URL_ETLITE_DAY = "http://m2.qiushibaike.com/article/list/text?page=";

    // 纯图
    public final static String URL_ETLITE_DAY = "http://m2.qiushibaike.com/article/list/image?page=";


    // 最新
    public final static String URL_HOT_LATEST = "http://m2.qiushibaike.com/article/list/latest?page=";
    //评论
    public final static String URL_COMMENT = "http://m2.qiushibaike.com/article/%d/comments?page=2"

    //头像获取(+ id去掉后4位 + "/" + id + "/thumb/" + icon图片名.jpg)
    //userIcon======http://pic.qiushibaike.com/system/avtnew/1499/14997026/thumb/20140404194843.jpg
    public final static String URL_USER_ICON="http://pic.qiushibaike.com/system/avtnew/%s/%s/thumb/%s";
    //内容图片获取(+图片名从数字开始去掉后4位+图片名从数字开始数全部+"/"+"/"+small或者medium+"/"+图片名)
    //====图片Url=http://pic.qiushibaike.com/system/pictures/7128/71288069/small/app71288069.jpg
    public final static String URL_IMAGE= "http://pic.qiushibaike.com/system/pictures/%s/%s/%s/%s";

}


OkHttpClient

 OkHttpClient client = new OkHttpClient();
 Request request = new Request.Builder().url("http://m2.qiushibaike.com/article/list/suggest?page=").get().build();
 call = client.newCall(request);
 //同步请求
 //Response response = call.execute();//这个方法使用频率较低。
  call.enqueue(this);//用的比较多的是这个异步请求。


注意HttpClient 在Android6.0已经过时了。这里的OkHttpClient使用的是HttpConnection。


call.enqueue()需要回调,下面的两个方法。
一定要在非UI线程中执行。如果想要改UI,可以使用handler或者使用runOnUiThread
    @Override
    public void onFailure(Request request, IOException e) {
                
    }

    @Override
    public void onResponse(Response response) throws IOException {

    }

 
----------------------------------------
可以使用handler或者使用runOnUiThread,最好使用handler,别忘了Intnet权限

    @Override
    public void onFailure(Request request, IOException e) {
        e.printStackTrace();
        Log.d("151229MY","onFailure"+Thread.currentThread().getName() );

    }

    @Override
    public void onResponse(Response response) throws IOException {
        Log.d("151229MY","onSuccessful"+Thread.currentThread().getName() );
        final String s = response.body().string();//response.body().可以有很多参数I如内容长度,bytes等等
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                textView.setText(s);
            }
        });
    }


--------------------------------------------

Log的输出:
12-29 17:53:07.326 16120-16161/com.kodulf.picasookhttpretrofitdemo D/151229MY: onSuccessfulOkHttp http://www.baidu.com/
12-29 17:55:25.916 18846-18871/com.kodulf.picasookhttpretrofitdemo D/151229MY: onFailureOkHttp http://www.baidu.com/

--------------------------------------------
当用户退出当前页面的时候,请求也要结束,所以最好是在onStop 里面cancel掉请求。
@Override
    protected void onStop() {
        super.onStop();
        call.cancel();
    }
---------------------------------------------
OkHttpClient结合listView
---------------------------------------------
public class MainActivity extends AppCompatActivity implements Callback {

    private Call call;
    private TextView textView;
    private ListView listView;
    private ArrayAdapter<String> adapter;

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

        //textView = (TextView) findViewById(R.id.main_text);
        listView = (ListView) findViewById(R.id.main_listView);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
        listView.setAdapter(adapter);

        OkHttpClient client = new OkHttpClient();
        //Request request = new Request.Builder().url("http://www.baidu.com/").get().build();
        Request request = new Request.Builder().url("http://m2.qiushibaike.com/article/list/suggest?page=1").get().build();
        call = client.newCall(request);
        //同步请求
        //Response response = call.execute();//这个方法使用频率较低。
        call.enqueue(this);//用的比较多的是这个异步请求。
    }

    @Override
    public void onFailure(Request request, IOException e) {
        e.printStackTrace();
        Log.d("151229MY", "onFailure" + Thread.currentThread().getName());

    }

    @Override
    public void onResponse(Response response) throws IOException {
        Log.d("151229MY", "onSuccessful" + Thread.currentThread().getName());
        final String s = response.body().string();//response.body().可以有很多参数I如内容长度,bytes等等
        try {
            JSONObject object = new JSONObject(s);
            JSONArray items = object.getJSONArray("items");
            final List<String> list = new ArrayList<String>();
            for (int i = 0; i < items.length(); i++) {
                list.add(items.getJSONObject(i).getString("content"));
            }
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //textView.setText(s);
                    adapter.addAll(list);
                }
            });
        } catch (JSONException e) {
            e.printStackTrace();
        }


    }

    @Override
    protected void onStop() {
        super.onStop();
        call.cancel();
    }
}
----------------------------------------------------------------------------
建一个Item的类
在构造方法里面添加一个放了JSONObject的构造方法

    public Item(JSONObject object) throws JSONException {
        if(!object.isNull("user")) {//因为有的是匿名发布的
            userIcon = object.getJSONObject("user").getString("icon");
            userName = object.getJSONObject("user").getString("login");
            image =object.getString("image");
            content =object.getString("content");
        }
    }

如果以后要添加多少个人顶,多少个人踩,只要在这里面修改就好了。
-----------------------------------------------------------------------

一种新的ListView的adapter的写法:
不在构造方法的时候进行list的传入,而是弄一个方法来传递:
    public void addAll(List<Item> list){
        items.addAll(list);
        notifyDataSetChanged();
    }

------------------------------------------------------------------------

package com.kodulf.picasookhttpretrofitdemo;

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

import java.util.List;

/**
 * Created by Administrator on 15-12-29.
 */
public class ItemAdapter extends BaseAdapter {
    private Context context;
    private List<Item> items;

    public ItemAdapter(Context context) {
        this.context = context;
    }

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

    @Override
    public Object getItem(int position) {
        return items.get(position);
    }

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

    public void addAll(List<Item> list){
        items.addAll(list);
        notifyDataSetChanged();
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
     if(convertView==null){
            convertView= LayoutInflater.from(context).inflate(R.layout.item,parent,false);
            convertView.setTag(new ViewHolder(convertView));
        }
        Item item = items.get(position);
        ViewHolder holder = (ViewHolder)convertView.getTag();
        holder.name.setText(item.getUserName());
        holder.content.setText(item.getContent());

        return convertView;
    }

    private static class ViewHolder{
        private ImageView icon;
        private ImageView image;
        private TextView content;
        private TextView name;
        public ViewHolder(View itemView){
            icon =(ImageView)itemView.findViewById(R.id.user_icon);
            image =(ImageView)itemView.findViewById(R.id.image);
            content =(TextView)itemView.findViewById(R.id.content);
            name=(TextView)itemView.findViewById(R.id.user_name);
        }

    }
}


---------------------------------------------------------------------------
Main_Activity

package com.kodulf.picasookhttpretrofitdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.squareup.okhttp.Call;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements Callback {

    private Call call;
    private TextView textView;
    private ListView listView;
    private ItemAdapter adapter;
    //private ArrayAdapter<String> adapter;

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

        //textView = (TextView) findViewById(R.id.main_text);
        listView = (ListView) findViewById(R.id.main_listView);
        adapter = new ItemAdapter(this);
        //adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
        listView.setAdapter(adapter);

        OkHttpClient client = new OkHttpClient();
        //Request request = new Request.Builder().url("http://www.baidu.com/").get().build();
        Request request = new Request.Builder().url("http://m2.qiushibaike.com/article/list/suggest?page=1").get().build();
        call = client.newCall(request);
        //同步请求
        //Response response = call.execute();//这个方法使用频率较低。
        call.enqueue(this);//用的比较多的是这个异步请求。
    }

    @Override
    public void onFailure(Request request, IOException e) {
        e.printStackTrace();
        Log.d("151229MY", "onFailure" + Thread.currentThread().getName());

    }

    @Override
    public void onResponse(Response response) throws IOException {
        Log.d("151229MY", "onSuccessful" + Thread.currentThread().getName());
        final String s = response.body().string();//response.body().可以有很多参数I如内容长度,bytes等等
        try {
            JSONObject object = new JSONObject(s);
            JSONArray items = object.getJSONArray("items");
            //final List<String> list = new ArrayList<String>();
            final List<Item> list = new ArrayList<Item>();
            for (int i = 0; i < items.length(); i++) {
                //list.add(items.getJSONObject(i).getString("content"));
                list.add(new Item(items.getJSONObject(i)));
            }
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //textView.setText(s);
                    //adapter.addAll(list);
                    adapter.addAll(list);
                }
            });
        } catch (JSONException e) {
            e.printStackTrace();
        }


    }

    @Override
    protected void onStop() {
        super.onStop();
        call.cancel();
    }
}
--------------------------------------------------
Item:
package com.kodulf.picasookhttpretrofitdemo;

import org.json.JSONException;
import org.json.JSONObject;

/**
 * Created by Administrator on 15-12-29.
 */
public class Item
{
    private String userIcon;
    private String userName;
    private String content;
    private String image;

    public Item() {
    }
    public Item(JSONObject object) throws JSONException {
        if(!object.isNull("user")) {//因为有的是匿名发布的
            userIcon = object.getJSONObject("user").getString("icon");
            userName = object.getJSONObject("user").getString("login");
            image =object.getString("image");
            content =object.getString("content");
        }
    }

    public String getUserIcon() {
        return userIcon;
    }

    public void setUserIcon(String userIcon) {
        this.userIcon = userIcon;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public Item(String userIcon, String userName, String content, String image) {
        this.userIcon = userIcon;
        this.userName = userName;
        this.content = content;
        this.image = image;
    }
}

--------------------------------------------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值