Java 我的应用程序在使用OkHttp时崩溃
当我尝试使用OkHttp发送post请求时,我手机上的应用程序(LG g3)崩溃,没有出现错误Java 我的应用程序在使用OkHttp时崩溃,java,android,post,okhttp,Java,Android,Post,Okhttp,当我尝试使用OkHttp发送post请求时,我手机上的应用程序(LG g3)崩溃,没有出现错误 btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { RequestBody body = RequestBody.create(MediaType.parse("application/x-www-f
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
RequestBody body = RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"), "login=test&pasword=test");
Request request = new Request.Builder()
.url("http://myUrl")
.post(body)
.build();
try {
Response response = client.newCall(request).execute();
txtRequest.setText(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
});
我做错了什么?您正在主线程上执行网络调用,我想这是您遇到的异常。使用AsyncTask,您的问题就解决了。这是您的代码的更正版本。 已编辑
package com.example.nisu.postrequest;
import android.os.AsyncTask;
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.TextView;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class SendPost extends AppCompatActivity {
Button btnSend;
TextView txtRequest;
OkHttpClient client = new OkHttpClient();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_send_post);
btnSend = (Button) findViewById(R.id.btnSend);
txtRequest = (TextView) findViewById(R.id.txtRequest);
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Request request = new Request.Builder()
.url("http://httpbin.org/ip").get()
.build();
new MyAsyncTask().execute(request);
}
});
}
class MyAsyncTask extends AsyncTask<Request, Void, Response> {
@Override
protected Response doInBackground(Request... requests) {
Response response = null;
try {
response = client.newCall(requests[0]).execute();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
@Override
protected void onPostExecute(Response response) {
super.onPostExecute(response);
try {
txtRequest.setText(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package com.example.nisu.postrequest;
导入android.os.AsyncTask;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入java.io.IOException;
导入okhttp3.MediaType;
导入okhttp3.OkHttpClient;
导入okhttp3.请求;
导入okhttp3.RequestBody;
导入okhttp3.响应;
公共类SendPost扩展了AppCompative活动{
按钮BTN发送;
TextView txtRequest;
OkHttpClient=新的OkHttpClient();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u send\u post);
btnSend=(按钮)findviewbyd(R.id.btnSend);
txtRequest=(TextView)findViewById(R.id.txtRequest);
btnSend.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
最终请求=新请求.Builder()
.url(“http://httpbin.org/ip)获取()
.build();
新建MyAsyncTask().execute(请求);
}
});
}
类MyAsyncTask扩展了AsyncTask{
@凌驾
受保护的响应doInBackground(请求…请求){
响应=空;
试一试{
response=client.newCall(请求[0]).execute();
}捕获(IOE异常){
e、 printStackTrace();
}
返回响应;
}
@凌驾
受保护的void onPostExecute(响应){
super.onPostExecute(响应);
试一试{
setText(response.body().string());
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
}
请发布您的日志我是android studio和java的新手。。。现在,你们所有的代码都不起作用了(我确实尝试过用空的RequestBody=RequestBody.create(null)”;
向发送请求,但我的TextView仍然是空的=(这个api不需要post请求,它是一个get请求,所以只需用get调用即可。是的,我知道get…但是…不,它不起作用=(你能看看我的代码吗?刚刚更正了你的实现,看到了编辑后的答案,测试了它的工作性能。