标签: android-volley

Android Volley给了我一个outOfMemory异常

我正在使用凌空从服务器在水平滑动视图中显示图像,但我的图像非常大,这是我得到一个例外的内存不足

以下是我的排球班:

public class Volley{

private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;

public Volley(Context ctx) {
    Log.v("Volley", "Volley onCreate");
    mRequestQueue = com.android.volley.toolbox.Volley.newRequestQueue(ctx);

    final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
    final int cacheSize = maxMemory / 8;

    ImageLoader.ImageCache imageCache = new ImageLoader.ImageCache() {
        LruCache<String, Bitmap> imageCache = new LruCache<String, Bitmap>(cacheSize);

        @Override
        public void putBitmap(String key, Bitmap value) {
            imageCache.put(key, value);
        }

        @Override
        public Bitmap getBitmap(String key) {
            return imageCache.get(key);
        }
    };

    mImageLoader = new ImageLoader(mRequestQueue, imageCache);

}

public void clear(Context ctx) …
Run Code Online (Sandbox Code Playgroud)

android out-of-memory android-volley

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

如何使用自定义对象作为参数创建Volley JSONObject请求?

我正在尝试使用Volley库将JSONObject POST请求发送到服务器,该服务器接受2个参数,一个对象(地址)和一个不同对象列表(租户).

当我尝试发出请求时,第一个参数(地址)在发送之前由Volley格式化,并且服务器不接受该请求.

我的请求看起来像这样:

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, SERVER_URL,
    postPropertyJSONObject, responseListener, errorListener)
Run Code Online (Sandbox Code Playgroud)

我的postPropertyJSONObject是这样创建的:

JSONObject obj = new JSONObject();
obj.put("Address", convertAddressToJson(property.getAddress()).toString());
obj.put("Tenants", prop.getTenantList());
Run Code Online (Sandbox Code Playgroud)

convertAddressToJson()方法如下所示:

JSONObject jsonObject= new JSONObject();
jsonObject.put("Building", address.getBuilding());
jsonObject.put("Street", address.getStreet());
jsonObject.put("Town", address.getTown());
jsonObject.put("ZipCode", address.getZipCode());
jsonObject.put("County", address.getCounty());
jsonObject.put("Country", address.getCountry());
Run Code Online (Sandbox Code Playgroud)

我试过传递Address对象,但这根本没有序列化,所以它也不起作用.我还尝试在请求中使用的JSONObject的"Address"字段中传递Address.toString(),但这也不起作用.

我的Property对象的getAddress()方法返回一个Address对象,如下所示:

public class Address {

    private String Street;
    private String Building;
    private String Town;
    private String ZipCode;
    private String County;
    private String Country;
    // getters and setters
}
Run Code Online (Sandbox Code Playgroud)

当我在传递地址之前记录地址时,请求看起来像这样:

{"Town":"MyTown","Street":"MyStreet","County":"MyCounty","Country":"MyCountry",
 "ZipCode":"MyZipCode","Building":"MyBuilding"}
Run Code Online (Sandbox Code Playgroud)

但是当服务器记录它收到的内容时,它看起来像这样:

{\"Town\":\"MyTown\",\"Street\":\"MyStreet\",\"County\":\"MyCounty\",
 \"Country\":\"MyCountry\",\"ZipCode\":\"MyZipCode\",\"Building\":\"MyBuilding\"}"
Run Code Online (Sandbox Code Playgroud)

Volley应用的这种格式似乎正在改变我通过我的请求传递的价值所以任何人都可以告诉我是否有更好的方法来处理这个应该相对简单的任务?我使用String和Integer值向同一服务器发出了请求,但在尝试将自定义类作为参数传递时遇到了这个问题.

编辑

使用wbelarmino的提示,我切换到使用hashmap存储我的自定义对象并从中创建了一个JSONObject:

HashMap<String, Address> …
Run Code Online (Sandbox Code Playgroud)

parameters serialization android json android-volley

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

如何在android Volley中优化网络队列?(Volley Google IO 2013)

以下是图像请求的Volley日志的快照.几乎一半的渲染时间是由于网络队列占用.另一个是更高的,大部分时间在网络队列中.如何优化这样才能使网络队列更快?什么决定(除了线程优先级,图像请求默认为低优先级请求),网络队列的速度 - 采取什么?

注意:我是在三星Galaxy S4上运行的.

08-07 11:01:09.560: D/Volley(938): [1] MarkerLog.finish: (3662 ms) [ ]    http://farm6.static.flickr.com/5487/9452149004_c4ba6d2d97_t.jpg 0x8da7e4ac LOW 84
08-07 11:01:09.560: D/Volley(938): [1] MarkerLog.finish: (+0   ) [ 1] add-to-queue
08-07 11:01:09.565: D/Volley(938): [1] MarkerLog.finish: (+0   ) [12239] cache-queue-take
08-07 11:01:09.565: D/Volley(938): [1] MarkerLog.finish: (+0   ) [12239] cache-miss
08-07 11:01:09.570: D/Volley(938): [1] MarkerLog.finish: (+1694) [12243] network-queue-take
08-07 11:01:09.570: D/Volley(938): [1] MarkerLog.finish: (+1852) [12243] network-http-complete
08-07 11:01:09.570: D/Volley(938): [1] MarkerLog.finish: (+50  ) [12243] network-parse-complete
08-07 11:01:09.575: D/Volley(938): [1] MarkerLog.finish: (+21  ) [12243] network-cache-written …
Run Code Online (Sandbox Code Playgroud)

android android-volley

9
推荐指数
1
解决办法
6873
查看次数

Android Volley访问http响应头字段

如何使用Volley从响应中访问ETag等HTTP头字段?随着HttpUrlCoonection我只是做conn.getHeaderField("ETag"),就是这样.

谢谢

java android http android-volley

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

使用Google Volley上传图片

我需要将我正在开发的应用程序中的图像上传到服务器,我想知道如何使用Google Volley开发Multipart Request来加载图像.

谢谢

android android-volley

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

卷网服务器错误,网络响应为空

每次我尝试使用Volley的POST方法时,都会出现严重错误.我在getCause中得到null值,在getNetworkResponse.toString()中得到一些默认值.

如果我使用GET方法,这工作正常(我从我的网址得到回复).

有人可以帮忙吗?

    Map<String, String> jsonParams = new HashMap<String, String>();
    jsonParams.put("teststr", "abd");

    RequestQueue requestQueue = VolleySingleton.getInstance().getRequestQueue();
    JsonObjectRequest request = new JsonObjectRequest(
            Request.Method.POST,
            url,
            new JSONObject(jsonParams),
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    try {
                        Toast.makeText(getApplicationContext(), "Success"+response.toString(), Toast.LENGTH_LONG).show();
                    }catch(Exception e){
                        Toast.makeText(getApplicationContext(), "JSON ERROR", Toast.LENGTH_LONG).show();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("abd", "Error: " + error
                                    + ">>" + error.networkResponse.statusCode
                                    + ">>" + error.networkResponse.data
                                    + ">>" + error.getCause()
                                    + ">>" + error.getMessage());
                }
            }) …
Run Code Online (Sandbox Code Playgroud)

android android-volley

9
推荐指数
3
解决办法
4万
查看次数

将base64 imageString转换为位图以在ImageView中显示,在位图中显示null

(编辑)的

  • 在浏览器中访问API时,它正在下载图像.网址是http://example.com/api/v1/filedownloader.json?file=GvygDaYb64wUon0lxp2H1458543376.

  • 我更改了服务器名称并添加example.com到该URL.因此在浏览器中运行时不会下载图像文件.但是你可以在这里看到图像文件 .

  • 然后我用编码工具解码工具检查了文件.

  • 解码后,我得到了.bin file.然后我变成了.png format.只有这样我才能得到准确的图像.

  • 我不知道如何做所有这些功能来获取图像并在imageView中显示它.

  • 无论如何我用这个尝试了下面的代码:

logcat的:

03-24 04:29:43.816: E/OnResponse(15392): ÿØÿà??JFIF????????????ÿí??Photoshop 3.0??8BIM??????????g??9dXpsI_ORS9jWIcxWfWe(??bFBMD01000abe030000070e0000c51a0000161c0000251d0000bc2000007f350000fc370000323a00003f3c0000f4620000ÿâICC_PROFILE??????lcms????mntrRGB XYZ Ü????????)??9acspAPPL????????????????????????????????????????????????????öÖ??????????Ó-lcms??????????????????????????????????????????????????????????????????????????????????????????????
03-24 04:29:43.816: E/OnResponse(15392): desc??????ü??????^cprt????\??????wtpt????h??????bkpt????|??????rXYZ??????????gXYZ????¤??????bXYZ????¸??????rTRC????Ì??????@gTRC????Ì??????@bTRC????Ì??????@desc??????????????c2????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????text????????FB????XYZ ????????????öÖ??????????Ó-XYZ ????????????????3????¤XYZ ????????????o¢????8õ????XYZ ????????????b????·????ÚXYZ ????????????$ ????????¶Ïcurv????????????????????ËÉckö?Q4!ñ)2;FQw]íkpz±|¬i¿}ÓÃé0ÿÿÿÛ??C??       
03-24 04:29:43.816: E/OnResponse(15392):    

"##!  %*5-%'2(  .?/279<<<$-BFA:F5;<9ÿÛ??C
03-24 04:29:43.816: E/OnResponse(15392): 9& &99999999999999999999999999999999999999999999999999ÿÂ??¸¸??"??ÿÄ????????????????????????????ÿÄ??????????????????????????ÿÄ??????????????????????????ÿÚ??????????íÐÙG,!.Ph5ð8ò÷¸¥®ÐàÔ§DUdº
de??kP'.¤ÅS BG  ìóölâvw@+.ÆÖ®©$¸
Ø
03-24 04:29:43.816: E/OnResponse(15392): K¥Yp ³ºXC¹O/)u RÉuEÊ$£³UÂP©hL^ÅÌ ·üûÌ%§ EU-1i6Ss©,ÞÌõ®{·W¹k`¤I!kwt%ÙeP¦*Ôªóï-¿
03-24 04:29:43.816: E/OnResponse(15392):  l"4áá#^-KSIBá¯S¨jYeîÌùucÓq}Lvå^ jÍ [Bz¾·í'nUï#tE  ÂQ(äf)Uw(5ݨG/cUÙÀSAIÓ(´ÌÑY.,±iíÒ«Bଽ^pvf;TAX,KÄEµ XbìÜHqßìx¯Wf    ¬«R\¤.ªªì#IOYçx=ÿ??7+J%g(ªÉM*ÖhÙ­¶ìíZMøØ¹s^²Èó¡fº­(%F¬î\ÓF¥§*ÇÈÉ+«Çu{H륭]G4Q%A]Eñî>±3¦Y:,tÖØ&:×F3Óf]¡9ÖõQ9Zã??ÕZ3¼9zIÖy¶ÓT ÓPֺϫ@eÎv ìô}¿%ên[Tz)h6v¹n­,h°°?ÅfìÓOÇZ1ЮÑCdÖJí³íÁ±ÌN·VcÔpÐèkEÃ`W°+5hg
`Eçg4µãß4VzÆÏ[ã½-x7¨A`ºÊD5Wå®ky{º¬ZùöeÔÏG¶Br    VD&´³· …
Run Code Online (Sandbox Code Playgroud)

android android-volley

9
推荐指数
3
解决办法
3292
查看次数

获取凌空请求标记作为响应

我正在使用凌空,我有一个队列来调用一些API.队列从数据库填充.

在向请求volley队列添加请求之前,我通过调用设置请求标记

jsonObjectRequest.setTag(id);

作为回应,我想从该database列中删除一列id等于请求标记ID.

那么,我如何获得请求标签HttpRequest response

android json android-volley

9
推荐指数
1
解决办法
1328
查看次数

使用GSM不下载Volley文件

我正在使用Volley从AWS下载文件.文件大小约为6 MB.在Android文档中提到您不应该使用Volley下载大文件.那么Volley的文件大小限制是多少?我在模拟器上使用不同的网络类型和信号强度来检查我的应用程序在下载文件时的行为方式.我主要想检查GSM网络类型.如果我保持网络类型为GSM,即使我的信号强度很大,我也会超时.如果我的网络类型为Full或LTE,则文件下载速度非常快.对于GSM我甚至将重试限制增加到5分钟,但它仍然给我超时.我不想让重试政策大于10秒.这是我的代码.

public class MainActivity extends AppCompatActivity  {

    InputStreamVolleyRequest request;
    private TextView textView;
    private Button button;
    //private RequestQueue requestQueue;
    //WifiManager wifiManager;
     long FILE_SIZE ;
    long startTime;
    long endTime;
    private long takenTime;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.tv);
        button = findViewById(R.id.button);
        String mUrl="my url";
//        wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startTime = System.currentTimeMillis();
                textView.setText("");


                MySingleton.getMySingleton(getApplicationContext()).addToRequestQueue(request);

//                requestQueue.add(request);
                button.setEnabled(false);

            }
        });

//        requestQueue = Volley.newRequestQueue(getApplicationContext());
        request = new InputStreamVolleyRequest(Request.Method.GET, …
Run Code Online (Sandbox Code Playgroud)

android android-volley

9
推荐指数
1
解决办法
157
查看次数

如何使用 Volley 上传大文件?( 安卓 )

我想使用 Volley 在 POST 请求中上传大文件。我尝试使用VolleyMultiPartRequest库,但我得到java.lang.OutOfMemoryError

2020-11-13 19:14:06.636 18802-18802/com.example.myproject E/MainActivity: Tried to start foreground service from background
2020-11-13 19:14:09.730 18802-19082/com.example.myproject E/AndroidRuntime: FATAL EXCEPTION: Thread-15
    Process: com.example.myproject, PID: 18802
    java.lang.OutOfMemoryError: Failed to allocate a 303955984 byte allocation with 8388608 free bytes and 108MB until OOM, max allowed footprint 162626224, growth limit 268435456
        at java.util.Arrays.copyOf(Arrays.java:3164)
        at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118)
        at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
        at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)
        at com.example.myproject.utils.VolleyMultiPartRequest2.getBody(VolleyMultiPartRequest2.java:109)
        at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:275)
        at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:249)
        at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:94)
        at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:123)
        at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:131)
        at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)
        at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)
Run Code Online (Sandbox Code Playgroud)

所有像VolleyPlus …

java android android-volley

9
推荐指数
1
解决办法
389
查看次数