您的位置:首页 > 理论基础 > 计算机网络

OkHttp使用笔记

2015-10-27 13:33 507 查看
package com.example.louisokhttp;

import android.support.v4.widget.SimpleCursorAdapter.ViewBinder;
import android.support.v7.app.ActionBarActivity;

import java.io.IOException;

import com.squareup.okhttp.Callback;
import com.squareup.okhttp.FormEncodingBuilder;
import com.squareup.okhttp.Headers;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;

import android.annotation.SuppressLint;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

@SuppressLint("NewApi")
public class MainActivity extends ActionBarActivity implements  OnClickListener{

OkHttpClient mOkHttpClient = new OkHttpClient();
String url = "https://www.baidu.com/";
String  result="";
TextView textView1;
final int  MSG_WHAT=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button btnPost = (Button) findViewById(R.id.button1);
btnPost.setOnClickListener(this);
Button btnGet = (Button) findViewById(R.id.button2);
btnGet.setOnClickListener(this);
Button btnPostAsync = (Button) findViewById(R.id.button3);
btnPostAsync.setOnClickListener(this);
Button btnGetAsync = (Button) findViewById(R.id.button4);
btnGetAsync.setOnClickListener(this);

textView1=(TextView) findViewById(R.id.textView1);
}

private void doPost() throws Exception {
// TODO Auto-generated method stub
RequestBody formBody = new FormEncodingBuilder().add("platform", "android").add("name", "bug")
.add("subject", "XXXXXXXXXXXXXXX").build();

//当写请求头的时候,使用 header(name, value) 可以设置唯一的name、value。如果已经有值,旧的将被移除,然后添加新的。使用 addHeader(name, value) 可以添加多值(添加,不移除已有的)。
Request request = new Request.Builder().url(url).header("User-Agent", "OkHttp Headers.java")
.addHeader("Accept", "application/json; q=0.5").addHeader("Accept", "application/vnd.github.v3+json")
.post(formBody).build();

Response response = mOkHttpClient.newCall(request).execute();// execute
if (response.isSuccessful()) {
System.out.println(response.code());
//System.out.println(response.body().string());
String body=response.body().string();
System.out.println(body);
result="doPost|"+response.code()+"|"+body;
mHandler.sendEmptyMessage(MSG_WHAT);

}
}

private void doPostAsync() {
// TODO Auto-generated method stub
RequestBody formBody = new FormEncodingBuilder().add("platform", "android").add("name", "bug")
.add("subject", "XXXXXXXXXXXXXXX").build();

Request request = new Request.Builder().url(url).header("User-Agent", "OkHttp Headers.java")
.addHeader("Accept", "application/json; q=0.5").addHeader("Accept", "application/vnd.github.v3+json")
.post(formBody).build();

// enqueue
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {

}

@Override
public void onResponse(Response response) throws IOException {
// NOT UI Thread
if (response.isSuccessful()) {
System.out.println(response.code());

//System.out.println(response.body().string());
String body=response.body().string();
System.out.println(body);
result="doPostAsync|"+response.code()+"|"+body;
mHandler.sendEmptyMessage(MSG_WHAT);
}

}
});

}

private void doGet() throws Exception {
// TODO Auto-generated method stub
Request request = new Request.Builder().url(url).build();
Response response = mOkHttpClient.newCall(request).execute();// execute
if (response.isSuccessful()) {
System.out.println(response.code());
//System.out.println(response.body().string());
String body=response.body().string();
System.out.println(body);
result="doGet|"+response.code()+"|"+body;
mHandler.sendEmptyMessage(MSG_WHAT);
}
}

private void doGetAsync() {
// TODO Auto-generated method stub
Request request = new Request.Builder().url(url).build();
// enqueue
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {

}

@Override
public void onResponse(Response response) throws IOException {
// NOT UI Thread
if (response.isSuccessful()) {
System.out.println(response.code());
//System.out.println(response.body().string());
String body=response.body().string();
System.out.println(body);
result="doGetAsync|"+response.code()+"|"+body;
mHandler.sendEmptyMessage(MSG_WHAT);
}
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

Handler mHandler=new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_WHAT:
textView1.setText(result);
break;
default:
break;
}
super.handleMessage(msg);
};
};

@Override
public void onClick(View v) {

// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:

new Thread(new  Runnable() {
public void run() {
try {
doPost();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();

break;
case R.id.button2:
new Thread(new  Runnable() {
public void run() {
try {
doGet();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
break;
case R.id.button3:
doPostAsync();
break;
case R.id.button4:
doGetAsync();
break;

default:

break;
}

}
}


demo下载:http://download.csdn.net/detail/richiezhu/9216611

扩展阅读:http://blog.csdn.net/lmj623565791/article/details/47911083
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: