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;
}
}
--------------------------------------------------