简体   繁体   English

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

[英]My app crashes when using OkHttp

When I'm trying to send post request using OkHttp, the app on my phone (LG g3) crashes without an error.当我尝试使用 OkHttp 发送发布请求时,我的手机 (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();
            }
        }
    });

What am I doing wrong?我究竟做错了什么?

you are executing the network call on main thread, this is the exception i guess you are getting.您正在主线程上执行网络调用,这是我猜您遇到的异常。 Use AsyncTask and your problem is solved.使用 AsyncTask 即可解决您的问题。 here is corrected version of your code.这是您的代码的更正版本。 Edited已编辑

    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();
            }
        }
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM