【发布时间】:2017-06-07 20:42:54
【问题描述】:
我正在编写代码来使用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);
}
}
});
}
}
活动输出
Gradle
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
**我的活动在模拟器上崩溃了,但它正在正确调用 API,并且我在运行代码之前和之后检查了 API 控制台的使用情况?
运行代码前的 API 使用情况
运行代码后的 API 使用情况
【问题讨论】:
-
API 请求和响应对我来说工作正常(更新 api 密钥后)。问题一定是别的。
-
我的请求和响应现在也工作正常,问题是由于我在代理后面,我需要为 android 模拟器设置提供代理以使其使用 Internet。所以现在你可以看到(在我的 API 使用图表上)我正在正确调用 API,但现在我的 Activity 正在崩溃。
-
很高兴知道它的工作原理。尝试查看日志中的内容。如果是无法解决的不同问题,请考虑开一张新票。
-
你检查错误了吗?把你的堆栈跟踪。
-
仅供参考,几年来我一直在使用github.com/dvdme/forecastio-lib-java,而且非常棒,至少对于我的目的而言。
标签: java android api android-studio okhttp3