一.首先导入依赖
// ok compile 'com.squareup.okhttp3:okhttp:3.9.0' //制作头像 圆形imageview compile 'de.hdodenhof:circleimageview:2.2.0' 二.联网权限三.控件里面写入第三方的布局<uses-permission android:name="android.permission.INTERNET"></uses-permission> <!--允许写入sdcard的权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/head_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/ic_launcher" />
四.写主方法
package com.example.gjl.day02_okhttp;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.io.File;
import java.io.IOException;
import de.hdodenhof.circleimageview.CircleImageView;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
* 登录案例
* 1.get
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "MainActivity-----";
private EditText mobile;
private EditText password;
private String login_url = "https://www.zhaoapi.cn/user/login";
private String upload_url = "https://www.zhaoapi.cn/file/upload";
private CircleImageView circleImageView;
private String path;
private File file;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化界面
initViews();
//请求数据
//逻辑
}
// 获得控件
private void initViews() {
mobile = findViewById(R.id.mobile);
password = findViewById(R.id.password);
Button login = findViewById(R.id.login);
Button post_login = findViewById(R.id.post_login);
Button opCarara = findViewById(R.id.openCamera);
circleImageView = findViewById(R.id.head_icon);
opCarara.setOnClickListener(this);
login.setOnClickListener(this);
post_login.setOnClickListener(this);
}
//点击方法
@Override
public void onClick(View v) {
switch (v.getId()) {
//get 请求
case R.id.login:
//取得手机号,和密码
String mobile1 = mobile.getText().toString();
String password1 = password.getText().toString();
//使用OKHttp进行网络请求,拼接get
//闯将OKHttpCLient
OkHttpClient okHttpClient = new OkHttpClient();
//创建请求
Request request = new Request.Builder().url(login_url + "?mobile=" + mobile1 + "&password=" + password1).build();
//创建请求队列
Call call = okHttpClient.newCall(request);
//开始执行
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure() returned: " + "失败----");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "onResponse() returned: " + "chenggong--" + response.body().string());
}
});
//在回调方法里面进行我们的逻辑处理
break;
//post 请求
case R.id.post_login:
//取得手机号,和密码
String mobile2 = mobile.getText().toString();
String password2 = password.getText().toString();
//使用ok
OkHttpClient okHttpClient1 = new OkHttpClient();
//创建请求
//body 请求体
FormBody.Builder builder = new FormBody.Builder();
//添加字段
builder.add("mobile", mobile2);
builder.add("password", password2);
//闭环得到body对象
FormBody body = builder.build();
Request request1 = new Request.Builder().url(login_url).post(body).build();
//请求队列
Call call1 = okHttpClient1.newCall(request1);
call1.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure() returned: " + "post----失败----" + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "onResponse() returned: " + "post-----chenggong--" + response.body().string());
}
});
break;
//打开相机
case R.id.openCamera:
//隐式开启activity
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
//开启activity第二种方式
//设置图片保存的路径,一般是存入sdcard
path = Environment.getExternalStorageDirectory().getPath();
//uri 路径 tpye 文件类型
Uri uri = Uri.fromFile(new File(path + "/temp.png"));
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);//告诉系统相机,图片的存储路径
startActivityForResult(intent, 0);
break;
}
}
//重写onactivityresult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult() returned: " + "返回了---");
//获取图片,然后设置给imageview
file = new File(path + "/temp.png");
Uri uri = Uri.fromFile(file);
circleImageView.setImageURI(uri);
//上传图片 url file path-------------------------------
//创建OKHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
//创建MultiPartBody
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
//设置参数
MediaType mediaType = MediaType.parse("image/png");
builder.addFormDataPart("file", file.getName(), RequestBody.create(mediaType, file));
//添加其他参数
builder.addFormDataPart("uid", "71");
MultipartBody body = builder.build();
//创建请求队列
Request request = new Request.Builder().url(upload_url).post(body).build();
Call newCall = okHttpClient.newCall(request);
newCall.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure() returned: " + "shibai---" + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "onResponse() returned: " + response.body().string());
}
});
}
}