我使用Android的新Volley框架向我的服务器发出请求.但是在得到回复之前它会超时,尽管它确实有所回应.
我尝试添加此代码:
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, timeoutMs);
Run Code Online (Sandbox Code Playgroud)
在HttpClientStackVolley框架中的一个不同的整数(50000),但它仍然在50秒之前超时.
有没有办法将超时更改为长值?
在进行API调用时,我很少收到此错误.
java.lang.IllegalStateException: Fragment not attached to Activity
Run Code Online (Sandbox Code Playgroud)
我尝试将代码放在isAdded()方法中以检查片段当前是否已添加到其活动中但仍然很少出现此错误.我不明白为什么我仍然会收到此错误.我怎么能阻止它?
它在线上显示错误 -
cameraInfo.setId(getResources().getString(R.string.camera_id));
Run Code Online (Sandbox Code Playgroud)
下面是我正在制作的示例api调用.
SAPI.getInfo(getActivity(),
new APIResponseListener() {
@Override
public void onResponse(Object response) {
cameraInfo = new SInfo();
if(isAdded()) {
cameraInfo.setId(getResources().getString(R.string.camera_id));
cameraInfo.setName(getResources().getString(R.string.camera_name));
cameraInfo.setColor(getResources().getString(R.string.camera_color));
cameraInfo.setEnabled(true);
}
}
@Override
public void onError(VolleyError error) {
mProgressDialog.setVisibility(View.GONE);
if (error instanceof NoConnectionError) {
String errormsg = getResources().getString(R.string.no_internet_error_msg);
Toast.makeText(getActivity(), errormsg, Toast.LENGTH_LONG).show();
}
}
});
Run Code Online (Sandbox Code Playgroud) android illegalstateexception android-fragments android-activity android-volley
想象一下,我在一个已经有后台线程的服务中.我可以在同一个线程中使用齐射进行请求,以便回调同步发生吗?
这有两个原因: - 首先,我不需要另一个线程,创建它是一种浪费. - 其次,如果我在ServiceIntent中,线程的执行将在回调之前完成,因此我将没有来自Volley的响应.我知道我可以创建自己的服务,其中包含一些我可以控制的runloop的线程,但是需要在volley中使用此功能.
谢谢!
关于在我的项目中使用Volley,我几乎没有问题:
我正在使用凌空库在android中执行网络操作.所以我试图在我的项目中添加这个库,该项目是在Android Studio和gradle系统中创建的.
我在我的项目中添加了凌空库,但是当我与gradle同步时,我收到错误消息.我尝试了我在这里看到的所有答案,但没有任何对我有用.
错误消息:在Android Studio中找不到名称为"default"的配置
凌空/的build.gradle
apply plugin: 'android-library'
android {
compileSdkVersion 19
buildToolsVersion '19.0.1'
sourceSets {
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
}
main {
assets.srcDirs = ['assets']
res.srcDirs = ['res']
aidl.srcDirs = ['src']
resources.srcDirs = ['src']
renderscript.srcDirs = ['src']
java.srcDirs = ['src']
manifest.srcFile 'AndroidManifest.xml'
}
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序/的build.gradle
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion '19.0.1'
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' …Run Code Online (Sandbox Code Playgroud) 这不是一个真正的问题,但是,我想在这里分享一些我的工作代码供您参考.
据我们所知,HttpEntityAPI22已弃用,自API23以来已完全删除.目前,我们无法再访问Android Developer上的HttpEntity Reference(404).因此,以下是我使用Volley和没有HttpEntity的POST多部分请求的工作示例代码.它正在运行,经过测试Asp.Net Web API.当然,代码可能只是发布两个现有可绘制文件的基本示例,也不是所有情况下的最佳解决方案,也不是很好的调优.
MultipartActivity.java:
package com.example.multipartvolley;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import com.android.volley.NetworkResponse;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class MultipartActivity extends Activity {
private final Context context = this;
private final String twoHyphens = "--";
private final String lineEnd = "\r\n";
private final String boundary = …Run Code Online (Sandbox Code Playgroud) 如何为Volley请求设置自定义标头?目前,有一种方法可以为POST请求设置正文内容.我有一个简单的GET请求,但我需要传递自定义标头.我没有看到JsonRequest类如何支持它.有可能吗?
有没有人能够multipart/form-data在Android中使用Volley 完成发送POST?我没有成功尝试image/png使用POST请求上传到我们的服务器,如果有人的话,我很好奇.
我相信这样做的默认方法是public byte[] getPostBody()在Request.java类中重写并在File那里附加一个空白的Header键作为边界.然而,我的文件转换成String的Map<String, String> postParams,然后有它的编码似乎再次钝,而不是真正的优雅.我的尝试也没有成功.这实际上是阻止我们切换到这个库的唯一因素.
无论如何,所有的想法和答案都非常感激.谢谢您的帮助.
我已经看到了关于最佳方法的不同建议这个问题包括创建一个罐子.在其他地方,我已经看到过简单地将凌空源复制到您自己的项目中的建议.关于android.com上的库的这一部分似乎是最具权威性的.然而,在编译齐射之后,我没有一个aal库,而那个部分说我应该有.
所以我的问题是:我有一个标准布局的现有Android Studio项目和一个git存储库; 我应该怎么做才能增加凌空抽射?我应该把它下载到哪里?我该如何将其添加到Android Studio?我需要修改哪些Gradle文件(如果有).
希望,对于那些已经做过几次的人来说,这应该是面包和黄油的东西,但我找不到直截了当的描述.
-
根据Scott Barta的建议更新.
volley存储库中的gradle.build文件具有此行.
apply plugin: 'android-library'
Run Code Online (Sandbox Code Playgroud)
根据文档:" 图书馆项目不生成APK,他们生成一个.aar包(代表Android档案). "然而,当我建立一个排球项目时,没有创建.aar.
我的感觉是,由于Volley是一个由Android团队创建的图书馆项目,它很可能被生成并用作.aar包.关于是否更好地生成.aar,以及如何做到这一点的任何建议,将不胜感激.
我想发一个新JsonObjectRequest请求:
我想将带有此请求的JSON格式数据发送到服务器
JsonObjectRequest request = new JsonObjectRequest(
Request.Method.POST, "myurl.com", null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//...
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//...
}
})
{
@Override
protected Map<String,String> getParams() {
// something to do here ??
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
// something to do here ??
return params;
}
};
Run Code Online (Sandbox Code Playgroud)PS我也在我的项目中使用GSON库.
android-volley ×10
android ×9
http ×2
java ×2
android-json ×1
gradle ×1
http-post ×1
httpentity ×1
timeout ×1