学习《Android第一行代码后的笔记》
1、使用前在项目中添加依赖,编辑app/build.gradle文件如下:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
}
添加依赖会自动下载两个库,一个是OkHttp库,一个是Okio库,后者是前者的通信基础。
2、main.xml界面代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/send_request"
android:text="发送请求"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/response_text"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</ScrollView>
</LinearLayout>
3、MainActivity代码如下:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView responseText;
Button sendRequest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendRequest= (Button) findViewById(R.id.send_request);
responseText= (TextView) findViewById(R.id.response_text);
sendRequest.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId()==R.id.send_request){
sendRequestWithOkHttp();
}
}
private void sendRequestWithOkHttp() {
//开启线程来发起网络请求
new Thread(new Runnable() {
@Override
public void run() {
try {
OkHttpClient client=new OkHttpClient();
//要发起一个http请求,首先创建一个Request对象
Request request=new Request.Builder().url("http://123.206.81.238:8080/xiaomatext/json.json").build();
//调用Okhttp的newCall方法返回根据request请求,服务器返回的数据
Response response=client.newCall(request).execute();
//得到服务器返回的数据的详细内容
String responseData=response.body().string();
//展示服务器返回的数据到界面上
showResponse(responseData.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
private void showResponse(final String responseData) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//在这里进行UI操作,将结果显示到界面上
responseText.setText(responseData);
}
});
}
}
3、综合比较OkHttp比HttpURLConnection方便简洁一些。