我正在使用Retrofit + Okhttp发出POST请求,我遇到了以下错误:
02-05 04:45:13.981 15972-16249/com.myapp.android D/Retrofit? ---> HTTP POST http://10.0.0.4:3000/api/v1/users/1/posts
02-05 04:45:13.981 15972-16249/com.myapp.android D/Retrofit? Accept: application/json
02-05 04:45:13.981 15972-16249/com.myapp.android D/Retrofit? Content-Type: application/json; charset=UTF-8
02-05 04:45:13.981 15972-16249/com.myapp.android D/Retrofit? Content-Length: 150
02-05 04:45:13.981 15972-16249/com.myapp.android D/Retrofit? {"description":"test","image_url":"https://s3.amazonaws.com/bucket/xxx-4800-b0e0-fc206f95f158.jpeg","title":"test","price":0.0,"user_id":0}
02-05 04:45:13.981 15972-16249/com.myapp.android D/Retrofit? ---> END HTTP (150-byte body)
02-05 04:45:14.001 15972-15972/com.myapp.android W/EGL_genymotion? eglSurfaceAttrib not implemented
02-05 04:45:14.017 15972-16249/com.myapp.android D/Retrofit? ---- ERROR http://10.0.0.4:3000/api/v1/users/1/posts
02-05 04:45:14.017 15972-16249/com.myapp.android D/Retrofit? java.net.ProtocolException: Unexpected status line: HTTP/1.1 422??Unprocessable Entity
at com.squareup.okhttp.internal.http.StatusLine.parse(StatusLine.java:73)
at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:187)
at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80)
at com.squareup.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:791)
at com.squareup.okhttp.internal.http.HttpEngine.access$200(HttpEngine.java:90)
at …Run Code Online (Sandbox Code Playgroud) 我想知道是否有人可以确认一些因为我不确定它是否适用于手机上安装的Android版本或我正在编译的SDK版本.
似乎HTTPUrlConnection现在在设备> 4.4上内部使用OkHttp.因此,如果我的应用程序编译4.4但可以在4.0上工作,如果它在4.0上启动它仍然会使用下面的OkHttp?
我认为使用OkHttp作为直接实现并绕过HttpUrlConnection仍有一些优点?
提前致谢
private static final String URL = "http://www.livroandroid.com.br/livro/carros/carros_{tipo}.json";
public static List<Carro> getCarros(Context context, String tipo) throws IOException {
String url = URL.replace("{tipo}", tipo);
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(URL)
.build();
Response response = okHttpClient.newCall(request).execute();
String json = response.body().toString();
List<Carro> carros = parserJSON(context, json);
return carros;
}
Run Code Online (Sandbox Code Playgroud)
如果我json在调用getCarros方法时打印出变量的值,我在logcat中看到以下消息:
com.squareup.okhttp.internal.http.RealResponseBody@1e11866
如何记录我收到的实际JSON字符串?
我正在使用Retrofit 2.0.0-beta2库与API进行通信.直到上周五,一切正常.今天我收到这个错误:
Failed to resolve: com.squareup.okhttp:logging-interceptor:2.6.0-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
我无法摆脱它.我在网上搜索,但似乎我的gradle文件没问题:
build.gradle(项目)
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
}
}
allprojects {
repositories {
jcenter()
mavenCentral()
maven { url 'http://oss.sonatype.org/content/repositories/snapshots' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)
build.gradle(app)
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.package.app"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
//(...)
}
}
dependencies {
//(...)
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
compile 'com.squareup.okhttp:okhttp:2.5.0'
compile 'com.google.code.gson:gson:2.4'
compile …Run Code Online (Sandbox Code Playgroud) newBuilder()函数在OkHttp中的作用是什么.它是创建一个全新的客户端还是调整此处给出的现有客户端.在这种情况下,"调整"究竟意味着什么?
我正在尝试使用我的Android应用程序将一些数据存储在mysql数据库中。我正在使用okhttp3发送请求,但在此行出现一个错误:
client.newCall(request).execute();
Run Code Online (Sandbox Code Playgroud)
我在本地计算机和在线上尝试了它,但是它给了我同样的错误,这里是代码,
public class MainActivity extends AppCompatActivity {
String token1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("MainActivity is :" + FirebaseInstanceId.getInstance().getToken());
FirebaseMessaging.getInstance().subscribeToTopic("test");
FirebaseInstanceId.getInstance().getToken();
token1=FirebaseInstanceId.getInstance().getToken();
}
public void clicking(View view) {
OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder()
.add("Token",token1)
.build();
okhttp3.Request request = new okhttp3.Request.Builder()
.url("http://saleh923.byethost8.com/hii.html")
.post(body)
.build();
try {
client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是日志:
com.example.user.firebasenot E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.firebasenot, PID: 3280
java.lang.IllegalStateException: Could not execute method …Run Code Online (Sandbox Code Playgroud) 我有一个关于mobilefirst的大问题,当我尝试调用受保护的资源时,我遇到了这个问题:
问题仅在Android上,iOS完美运行.
evaluateJavascript = cordova.callbackFromNative('WLResourceRequestPlugin368975848',false,9,[{"status":400,"statusText":"Bad Request","responseText":"{\"errorCode \":\"invalid_client \",\ "errorMsg \":\"错误的JWT格式\"}","responseJSON":{"errorCode":"invalid_client","errorMsg":"不正确的JWT格式"},"responseHeaders":{"X-Powered-By ":" 的Servlet/3.1" , "内容类型": "应用/ JSON", "内容语言": "EN-US", "传输编码": "分块", "连线": "关闭", "日期":"2017年5月31日星期三16:13:55 GMT","OkHttp-Sent-Millis":"1496218412371","OkHttp-Received-Millis":"1496218412405"},"errorMsg":"JWT不正确格式", "的errorCode": "invalid_client"}],假);
问题是我检查了客户端的时间和服务器时间,它们是相同的,但是当我更改客户端时间并添加一天它就可以了!我该如何解决这个问题?
cordova okhttp ibm-mobilefirst mobilefirst-adapters mobilefirst-server
exception在接收到回调后执行ui动作时我得到了这个OkHttp.
致命异常:OkHttp Dispatcher进程:org.example.verificationserviceexample,PID:20421 android.util.AndroidRuntimeException:动画师只能在android.animation的android.animation.ValueAnimator.cancel(ValueAnimator.java:1020)的Looper线程上运行. AnimatorSet.cancel(AnimatorSet.java:366)在android.graphics.drawable.RippleComponent.cancelSoftwareAnimations(RippleComponent.java:214)在android.graphics.drawable.RippleComponent.cancel(RippleComponent.java:133)在android.graphics.drawable .RippleComponent.enter(RippleComponent.java:100)在android.graphics.drawable.RippleDrawable.tryBackgroundEnter(RippleDrawable.java:552)在android.graphics.drawable.RippleDrawable.setBackgroundActive(RippleDrawable.java:290)在android.graphics.在Android.widget.TextView的android.view.View.drawableStateChanged(View.java:18046)的android.graphics.drawable.Drawable.setState(Drawable.java:735)中的drawable.RippleDrawable.onStateChange(RippleDrawable.java:270) .drawableStateChanged(TextView.j ava:4090)位于android.view.View.setEnabled(View.java)的android.view.View.refreshDrawableState(View.java:18115)的android.support.v7.widget.AppCompatButton.drawableStateChanged(AppCompatButton.java:155) :8135)在android.widget.TextView.setEnabled(TextView.java:1609)在org.example.verificationserviceexample.MainActivity.renderButtons(MainActivity.java:146)在org.example.verificationserviceexample.MainActivity.onAudioStateChanged(MainActivity.java: 170)在com.bssys.spitchmobilesdk.audio.SpitchAudioManager.publishAudioStateChange(SpitchAudioManager.java:123)在com.bssys.spitchmobilesdk.audio.SpitchAudioManager.stopAudio(SpitchAudioManager.java:83)在com.bssys.spitchmobilesdk.VerificationService.stopAudio (VerificationService.java:96)位于org.example的org.example.verificationserviceexample.MainActivity.lambda $ null $ 0 $ MainActivity(MainActivity.java:60)的com.bssys.spitchmobilesdk.VerificationService.stopEnrollment(VerificationService.java:57) .verificationserviceexample.MainActivity $$林 BDA $ 3.onSpitchResult(来源不明)在com.bssys.spitchmobilesdk.VerificationService $ 1.onFailure(VerificationService.java:111)在okhttp3.RealCall $ AsyncCall.execute(RealCall.java:161)在okhttp3.internal.NamedRunnable.run( NamedRunnable.java:32)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:607)在java.lang.Thread.run (Thread.java:761)
这是我正在使用的代码:
public void addVoicePrintFromSource(Pipe source, SpitchConfig config, @NonNull String speakerId, Callback callback){
RequestBody requestBody = new RequestBody() {
@Override
public MediaType contentType() {
return MediaType.parse("audio/x-pcm; rate="+config.getRate());
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
sink.writeAll(source.source());
}
};
Request request = new Request.Builder()
.url(config.getServerURL())
.addHeader("Accept","*/*")
.addHeader("Connection","Keep-Alive")
.post(requestBody)
.build(); …Run Code Online (Sandbox Code Playgroud) 我正在使用Retrofit 2.4.0将请求发送到服务器。但是有时,如果服务器的时间戳与另一个请求具有相似的毫秒数,则服务器会阻止我的请求。我需要一次发送一个请求:
- 请求A已发送
- 请求B等待,直到收到对请求A的响应
- 请求A成功或错误完成
- 请求B已发送
是否可以使用Retrofit和OkHttp库创建此类队列?
我在Android应用中使用OkHttp库向天气API发出Web请求。我已经实现了我的代码,并且在执行请求时遇到了致命错误。
我已经在清单中添加了INTERNET权限。
MainActivity.java:
private CurrentWeather currentWeather;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActivityMainBinding binding = DataBindingUtil.setContentView(MainActivity.this, R.layout.activity_main);
String apiKey = "xxx";
double latitude = 37.8267;
double longitude = -122.4233;
String forecastURL = String.format("https://api.darksky.net/forecast/%s/%f,%f", apiKey, latitude, longitude);
if (isNetworkAvailable()) {
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 …Run Code Online (Sandbox Code Playgroud)