标签: android-volley

Android排球 - 方向变化

我们如何处理方向更改,Activities/ Fragments停止/恢复使用Volley

我知道对于GET请求,响应将被缓存,第二次我们尝试发出请求时,我们将获得缓存响应.(如果服务器发送正确的HTTP头)

但那怎么样POST?假设我发出POST请求(即注册,我想只发生一次),我的应用程序转到后台,请求在应用程序仍在后台时完成,然后我回到应用程序.如果它仍处于待处理状态,我该如何获得ResponseRequest,或者如何重新连接它?

AFAIK对此几乎没有任何支持Volley.我对吗?有没有一种简单的方法来解决上述情况,使用Volley

android android-networking android-volley

17
推荐指数
1
解决办法
6393
查看次数

使用Volley进行令牌认证

如果我有一个服务器,我使用用户名/密码进行身份验证并获得后续请求的身份验证令牌,那么解决此问题的最佳方法是什么?

该流程应该是这样的: - 启动要求 - 如果我们没有身份验证令牌 - 用得到它的用户名和密码 - 请与身份验证令牌的要求 - 如果请求失败,因为令牌过期,获得新的身份验证令牌与用户名和密码 - 使用新的身份验证令牌重试请求 - 完成

我注意到,排球已经可能有一些可能解决这个问题-身份验证https://android.googlesource.com/platform/frameworks/support/+/4474bc11f64b2b274ca6db5a1e23e8c1d143d5fa/volley/src/com/android/volley/toolbox/Authenticator .java它包含getAuthToken()和invalidateAuthToken()方法,这正是我想要的.但它似乎从未在图书馆中使用过.

android android-volley

17
推荐指数
1
解决办法
2万
查看次数

Android排球 - 检查互联网状态

在我使用Volley之前,像往常一样,我使用AsyncTask来检查我的互联网状态.

这是我在AsyncTask中所做的:

private class NetCheck extends AsyncTask<String, Void, Boolean> {

    @Override
    protected Boolean doInBackground(String... args) {
        // get Internet status
        return cd.isConnectingToInternet();
    }

    protected void onPostExecute(Boolean th) {
        if (th == true) {
            new LoadCategories().execute();
        } else {
            Toast.makeText(CategoryActivity.this, "Unable to connect to server",
                    Toast.LENGTH_LONG).show();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是isConnectingToInternet功能:

public boolean isConnectingToInternet() {
    ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity != null) {
        NetworkInfo info = connectivity.getActiveNetworkInfo();
        if (info != null && info.isConnected())    
            try {
                URL url = …
Run Code Online (Sandbox Code Playgroud)

java android android-volley

17
推荐指数
1
解决办法
3万
查看次数

凌空出现内存错误,奇怪的分配尝试

有时随机Volley在启动时崩溃我的应用程序,它在应用程序类中崩溃,用户无法再次打开应用程序,直到他们进入设置并清除应用程序数据

java.lang.OutOfMemoryError
at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:316)
at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:526)
at com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:549)
at com.android.volley.toolbox.DiskBasedCache$CacheHeader.readHeader(DiskBasedCache.java:392)
at com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:155)
at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84)
Run Code Online (Sandbox Code Playgroud)

"diskbasedbache"尝试分配超过1 GB的内存,没有明显的原因

我怎么能让这件事不发生?这似乎是Volley的问题,或者可能是基于自定义磁盘的缓存的问题,但我没有立即看到(从堆栈跟踪)如何"清除"此缓存或执行条件检查或处理此异常

洞察力赞赏

android out-of-memory android-volley diskcache

17
推荐指数
1
解决办法
1万
查看次数

与PC相比,为什么Android中的响应时间(Rest Call)响应速度较慢?

我正在从Android设备进行休息api调用,并且与PC相比,看到速度的差异真的很惊讶.下面是PC上休息工具的图像.在此输入图像描述

我尝试了很少的库,比如Retrofit,Volley和常规的异步任务来从Android设备进行相同的休息调用,并注意到响应时间.

(Response times with Retrofit library (Time includes converting json data to java objects)).
Test 1: 8372 Ms
Test 2: 7715 Ms
Test 3: 7686 Ms
Test 4: 10128 Ms
Test 5: 7876 Ms

(Response times with Volley. No conversion to Java Objects from Json Data )
Test 1: 6721 MS
Test 2: 6610 MS
Test 3: 6287 MS
Test 4: 6118 MS
Test 5: 6118 MS
Run Code Online (Sandbox Code Playgroud)

System.currentTimeMillis()在拨打电话之前收到了响应并减去了这些值,以便在Android程序中获得更高的响应时间.

如果有人能告诉我如何减少android中的响应时间,那将非常有用.

仅供参考:我在使用Wifi并在我的PC和Android设备上使用相同的网络.

这是Retrofit Android代码

RestAdapter adapter = new RestAdapter.Builder() …
Run Code Online (Sandbox Code Playgroud)

rest android android-asynctask android-volley retrofit

17
推荐指数
1
解决办法
3335
查看次数

如何将Cookie会话ID放入截击请求?

所以,我有这个代码用volley发出一个POST请求:

public class MainActivity extends AppCompatActivity {

 Button btnSearch;
 ProgressDialog loadingDialog;
 ListView lvResult;
 String session_id;
 RequestQueue queue;
 MyCookieManager myCookieManager;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  btnSearch = (Button) findViewById(R.id.btnSearch);
  lvResult = (ListView) findViewById(R.id.lvResult);
  loadingDialog = new ProgressDialog(MainActivity.this);
  loadingDialog.setMessage("Wait.\nLoading...");
  loadingDialog.setCancelable(false);
  myCookieManager = new MyCookieManager();

  requestCookie(); //FIRST CALL TO GET SESSION ID

  btnSearch.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
    showLoading();
    requestWithSomeHttpHeaders(); //CALL TO MAKE THE REQUEST WITH VALID SESSION ID
   }
  });

 }

 public void requestCookie() {
  queue …
Run Code Online (Sandbox Code Playgroud)

cookies post android request android-volley

17
推荐指数
1
解决办法
3331
查看次数

Volley JSONException:在0的字符0处输入结束

我见过其他人遇到过这个问题,但没有一个帖子可以帮助我.我正在尝试将Volley用于我的REST调用库,当我尝试使用带有JSON对象的Put调用作为参数时,我得到了error with: org.json.JSONException: End of input at character 0 of.

这是代码:

protected void updateClientDeviceStatus(Activity activity, final int status) {
    JSONObject jsonParams = new JSONObject();
    try {
        jsonParams.put("statusId", String.valueOf(status));
    } catch (JSONException e1) {
        e1.printStackTrace();
    }
    Log.i(LOG_TAG, "json: " + jsonParams.toString());

    String url = Constants.API_URL + "client/device/" + getDeviceId();
    // Request a response from the provided URL.
    JsonObjectRequest request = new JsonObjectRequest
            (Request.Method.PUT, url, jsonParams, new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    Log.i(LOG_TAG, "updated client status");
                    Log.i(LOG_TAG, …
Run Code Online (Sandbox Code Playgroud)

java rest android json android-volley

16
推荐指数
1
解决办法
2万
查看次数

如何为排球库制作单独的类并从另一个活动中调用所有排球方法并获得响应?

如何创建一个单独的类,其中定义所有关于齐射和另一个活动,我们直接传递URL,CONTEXT和获取响应...

android android-volley

16
推荐指数
1
解决办法
1万
查看次数

com.android.volley.NoConnectionError - 使用Charles Proxy的Android模拟器

我想代理Android模拟器的网络流量.

我似乎无法让它发挥作用.

我的模拟器使用以下方式启动:

emulator @Nexus_5X_API_23 -http-proxy 10.0.1.17:8888
Run Code Online (Sandbox Code Playgroud)

IP和端口指向Charles在"帮助"菜单中报告的内容.

已安装SSL证书.我可以打开模拟器浏览器,Charles向我显示所有流量.浏览器照常更新.

到目前为止一切似乎都很好

现在我尝试运行我的应用程序.我的第一个网络电话通过查尔斯成功通过.响应返回,Charles显示它.但是,响应未成功传递给应用程序.

我在错误回调中设置了一个断点,我可以看到com.android.volley.NoConnectionError是由哪个引起的java.io.IOException: unexpected end of stream on Connection.

为什么Charles没有将结果正确地传回给应用程序?

我是否需要执行查尔斯配置页末尾定义的内容

HttpHost httpproxy = new HttpHost("192.168.0.101", 8888, "http");
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,httpproxy);
Run Code Online (Sandbox Code Playgroud)

这似乎不正确 - 我错过了什么?

proxy android android-volley charles-proxy

16
推荐指数
1
解决办法
997
查看次数

让Robolectric与Volley合作

我想让Volley和Robolectric一起工作.我可以看到我的HTTP请求被调用,并且调用了parseNetworkResponse(我正在发送一个JsonRequest的自定义子类),但我的监听器没有被调用.有什么建议?这是一个代码示例:

@Test
public void testTypeAheadClient() throws Exception {
    Robolectric.getFakeHttpLayer().interceptHttpRequests(false);
    //mRemoteRequestQueue and mCustomRequest are set up previously
    mRemoteRequestQueue.add(mCustomRequest);
}

private static class CustomRequest extends JsonRequest<MyObject> {
    public CustomRequest(String url,
                         Response.Listener<MyObject> listener,
                         Response.ErrorListener errorListener) {
        super(Request.Method.GET, url, null, listener, errorListener);
    }

    @Override
    protected Response<MyObject> parseNetworkResponse(NetworkResponse response) {
        System.out.println("in parseNetworkResponse");
        try {
            MyObject myObject = new MyObject(new JSONArray(new String(response.data, "UTF-8")));
            return Response.success(myObject, HttpHeaderParser.parseCacheHeaders(response));
        } catch (Exception e) {
            e.printStackTrace();
            return Response.error(new ParseError(e));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

android robolectric android-volley

15
推荐指数
1
解决办法
3256
查看次数