Android http Verbindung mit OkHttp funktioniert nicht

Ich versuche, OkHttp zu verwenden, aber es stürzt immer wieder ab. Kann jemand einen kurzen Blick darauf werfen und sehen, ob Sie wissen, was passiert. Vielen Dank

Log cat:

01-24 08:34:46.952: E/AndroidRuntime(31953): FATAL EXCEPTION: OkHttp Dispatcher
01-24 08:34:46.952: E/AndroidRuntime(31953): java.lang.NoClassDefFoundError: okio.Okio
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.internal.http.HttpConnection.<init>(HttpConnection.java:87)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Connection.upgradeToTls(Connection.java:272)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Connection.connect(Connection.java:158)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:174)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:120)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.internal.http.RouteSelector.next(RouteSelector.java:131)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:312)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:235)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Call.getResponse(Call.java:262)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:219)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:192)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Call.access$100(Call.java:34)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:156)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-24 08:34:46.952: E/AndroidRuntime(31953):    at java.lang.Thread.run(Thread.java:841)

Hier ist das Codebeispiel, das ich verwenden möchte. Es stammt aus einem Online-Tutorial (teamtreehouse.com) Java-Code:

OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(forecastUrl)
                    .build();

            Call call = client.newCall(request);
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Request request, IOException e) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            toggleRefresh();
                        }
                    });
                    alertUserAboutError();
                }

                @Override
                public void onResponse(Response response) throws IOException {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            toggleRefresh();
                        }
                    });

                    try {
                        String jsonData = response.body().string();
                        Log.v(TAG, jsonData);
                        if (response.isSuccessful()) {
                            mCurrentWeather = getCurrentDetails(jsonData);
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    updateDisplay();
                                }
                            });
                        } else {
                            alertUserAboutError();
                        }
                    }
                    catch (IOException e) {
                        Log.e(TAG, "Exception caught: ", e);
                    }
                    catch (JSONException e) {
                        Log.e(TAG, "Exception caught: ", e);
                    }
                }
            });

Antworten auf die Frage(4)

Ihre Antwort auf die Frage