Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的应用程序在使用OkHttp时崩溃_Java_Android_Post_Okhttp - Fatal编程技术网

Java 我的应用程序在使用OkHttp时崩溃

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

当我尝试使用OkHttp发送post请求时,我手机上的应用程序(LG g3)崩溃,没有出现错误

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…但是…不,它不起作用=(你能看看我的代码吗?刚刚更正了你的实现,看到了编辑后的答案,测试了它的工作性能。