簡體   English   中英

Android…使用Okhttp無法從Darksky Weather API中獲得JSON響應

[英]Android…Not getting JSON respone from darksky weather API using Okhttp

我正在編寫代碼以使用Darksky API構建簡單的天氣應用程序,以下是我的Java代碼文件。 我在其中使用okHttp 3.5.0,並異步調用darksky API並在日志上寫入響應。

MainActivity.java

package treehouse.com.stormy;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import java.io.IOException;

import javax.xml.datatype.Duration;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    public static final String TAG=MainActivity.class.getSimpleName();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        double latitude=37.8267;
        double longitude=-122.4233;
        String apiKey="Here you would insert your key and I have ofcourse mine";
        String forecastURL="https://api.darksky.net/forecast/" + apiKey + "/" + latitude + "," + longitude;

      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(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                try {
                    if(response.isSuccessful()) {
                        Log.v(TAG, response.body().string());
                    }
                } catch (IOException e) {

                    Log.e(TAG,"Exception caught: ",e);
                }
            }
        });


    }
}

活動輸出

在此處輸入圖片說明

搖籃

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "25.0.1"
    defaultConfig {
        applicationId "treehouse.com.stormy"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.squareup.okio:okio:1.6.0'
    compile project(':okhttp-3.5.0')
}
repositories {
    mavenCentral()

}

詳細的Logcat

logcat的

**我的活動在模擬器上崩潰了,但是它正確地調用了API,並且在運行代碼之前和之后我都檢查了API控制台的使用情況嗎?

運行代碼之前的API使用情況

在此處輸入圖片說明

運行代碼后的API使用情況

在此處輸入圖片說明

您使用的Okio庫的舊版本與您的OkHttp版本不兼容,從而在嘗試調用不存在的方法時導致崩潰。 我建議使用最新版本的Okio,但是OkHttp maven庫也已經具有依賴項。

只需從gradle文件中刪除compile 'com.squareup.okio:okio:1.6.0'行即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM