JAVA与服务器php通信

时间:2019-12-07 16:09:28

标签: java android

我想编写一个非常简单的API。 当我使用邮递员API的作品。 我想创建android应用,但是我的应用崩溃了。为什么? 错误在哪里

OkHttpClient zapytanie = new OkHttpClient();
                RequestBody requestBody = new FormBody.Builder()
                        .add("login", "some_email")
                        .add("password", "some_password")
                        .build();
                final Request request = new Request.Builder()
                        .header("Content-Type", "application/x-www-form-urlencoded")
                        .url("https://garlic-dragon.000webhostapp.com/registration.php")
                        .post(requestBody)
                        .build();
                try {
                    Response response = zapytanie.newCall(request).execute();
                    Toast.makeText(getApplicationContext(), "This is my success!",
                            Toast.LENGTH_LONG).show();
                } catch (IOException e) {
                    //e.printStackTrace();
                    Toast.makeText(getApplicationContext(), e.toString(),
                            Toast.LENGTH_LONG).show();
                }

  

2019-12-07 19:32:56.007 28055-28055 / com.example.chat E / AndroidRuntime:   致命异常:主要       流程:com.example.chat,PID:28055       android.os.NetworkOnMainThreadException           在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1513)           在java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:117)           在java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:105)           在java.net.InetAddress.getAllByName(InetAddress.java:1154)           在okhttp3.Dns $ Companion $ SYSTEM $ 1.lookup(Dns.kt:48)           在okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress(RouteSelector.kt:160)           在okhttp3.internal.connection.RouteSelector.nextProxy(RouteSelector.kt:125)           在okhttp3.internal.connection.RouteSelector.next(RouteSelector.kt:71)           在okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:199)           在okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:109)           在okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:77)           在okhttp3.internal.connection.Transmitter.newExchange $ okhttp(Transmitter.kt:162)           在okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:35)           在okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)           在okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)           在okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:82)           在okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)           在okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)           在okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:84)           在okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)           在okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:71)           在okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)           在okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)           在okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.kt:184)           在okhttp3.RealCall.execute(RealCall.kt:66)           在com.example.a4.MainActivity $ 2.onClick(MainActivity.java:78)           在android.view.View.performClick(View.java:7339)           在android.widget.TextView.performClick(TextView.java:14222)           在android.view.View.performClickInternal(View.java:7305)           在android.view.View.access $ 3200(View.java:846)           在android.view.View $ PerformClick.run(View.java:27787)           在android.os.Handler.handleCallback(Handler.java:873)           在android.os.Handler.dispatchMessage(Handler.java:99)           在android.os.Looper.loop(Looper.java:214)           在android.app.ActivityThread.main(ActivityThread.java:7078)           在java.lang.reflect.Method.invoke(本机方法)           在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:493)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)

1 个答案:

答案 0 :(得分:0)

错误必须为NetworkOnMainThreadException,这是因为无法在主线程上执行同步HTTP。使用入队不执行 异步运行请求。

     OkHttpClient zapytanie = new OkHttpClient();
     RequestBody requestBody = new FormBody.Builder()
                          .add("login", "some_email")
                          .add("password", "some_password")
                          .build();
     final Request request = new Request.Builder()
                          .header("Content-Type", "application/x-www-form-urlencoded")
                          .url("https://garlic-dragon.000webhostapp.com/registration.php")
                          .post(requestBody)
                          .build();
     try {
          Response response = zapytanie.newCall(request).enqueue(new Callback() {
          @Override
            public void onFailure(Request request, Throwable throwable) {
             // Something went wrong
            }

            @Override public void onResponse(Response response) throws IOException {
                 if (response.isSuccessful()) {
                  // Do what you want to do with the response.
                 } else {
                  // Request not successful
                 }
            }
           });
     } catch (IOException e) {
          //e.printStackTrace();
          Toast.makeText(getApplicationContext(), e.toString(),
           Toast.LENGTH_LONG).show();
     } 

我建议使用Retrofit之类的库,以简化API调用。