当前位置: 首页 > 知识库问答 >
问题:

凌空错误响应为空

逄烨
2023-03-14

我正在从服务器下载文件。我用排球来做。

这是我的代码

public class MainActivity extends AppCompatActivity  {

    InputStreamVolleyRequest request;
    private TextView textView;
    private Button button;
    private RequestQueue requestQueue;
    WifiManager wifiManager;

    @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(Context.WIFI_SERVICE);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textView.setText("");
                requestQueue.add(request);
                button.setEnabled(false);

            }
        });

        requestQueue = Volley.newRequestQueue(getApplicationContext());
        request = new InputStreamVolleyRequest(Request.Method.GET, mUrl, new Response.Listener<byte[]>() {
            @Override
            public void onResponse(byte[] response) {
                if(response!=null){
                    FileOutputStream outputStream;
                    String name = "justdownloaded.mp3";
                    try {
                        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                        int speedMbps = wifiInfo.getLinkSpeed();
                        Log.i("Speed", "onResponse: "+speedMbps);

                        outputStream = openFileOutput(name, Context.MODE_PRIVATE);
                        outputStream.write(response);
                        Log.i("TAG", "onResponse: "+ Arrays.toString(response));

                        outputStream.close();
                        Toast.makeText(MainActivity.this, "Download complete.", Toast.LENGTH_LONG).show();
                        textView.setText("Complete");

//                        Log.i("TAG", "onResponse: "+getApplicationContext().getFilesDir().getAbsolutePath());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    button.setEnabled(true);

                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                if(error == null){
                    if(error.getClass().equals(TimeoutError.class)){
                        Toast.makeText(getApplicationContext(),"Time Out Error",Toast.LENGTH_LONG).show();
                    }
                }


                Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
                Log.i("TAG", "onErrorResponse: "+error.networkResponse);
                Log.i("TAG", "onErrorResponse2: "+error.getLocalizedMessage());
                Log.i("TAG", "onErrorResponse3: "+error.getMessage());

                Log.i("TAG", "onErrorResponse4: "+error.getNetworkTimeMs());
                Log.i("TAG", "onErrorRespons5: "+error.getCause());
                Log.i("TAG", "onErrorRespons6: "+error.getStackTrace().toString());

                button.setEnabled(true);
                textView.setText("Error");
            }
        });



    }

}

以下是错误侦听器的错误消息在一些弱网络连接上,我收到以下逻辑消息

onErrorResponse: null
onErrorResponse2: null
onErrorResponse3: null
onErrorResponse4: 25807
onErrorRespons5: null
onErrorRespons6: [Ljava.lang.StackTraceElement;@14b4f28

我不明白失败的原因是什么,因为大多数错误消息都返回null。我很确定这是因为请求超时,我知道如何增加超时,但是我应该在错误侦听器中编写什么代码,以便在出现错误时获得正确的错误消息。

共有1个答案

左仰岳
2023-03-14

if (error == null) {
    if (error.getClass().equals(TimeoutError.class)){
        Toast.makeText(getApplicationContext(),"Time Out Error",Toast.LENGTH_LONG).show();
    }
}

应该是的

if (error != null) {
    if (error.getClass().equals(TimeoutError.class)) {
        Toast.makeText(getApplicationContext(),"Time Out Error",Toast.LENGTH_LONG).show();
    }
}

首先解决这个问题!

 类似资料:
  • 我有一个凌空的JSONRequest,它被卡住了,因为来自服务器的响应不是有效的JSON(它是html)。 如何才能优雅地处理此错误?我有以下实现: 然而,当我发送请求并得到无效的JSON响应时,不会调用onErrorResponse。相反,我得到了一个例外 整个应用程序崩溃了。 我设法将该错误跟踪到JsonObjectRequest.java类中的以下行: 调用的行是:返回响应。错误(new P

  • 我正在尝试向我的API发出请求,它可以在中工作(我得到一个有效的JSON对象),但不使用。使用以下代码: 我收到以下错误: 我看过很多例子,我真的不知道哪里出了问题。有人知道吗? 我用这个方法更新了代码: 并将更改为: 仍然收到相同的错误!

  • 我的后端是spring,前端是Angular。我无法访问授权标头。在postman中,如果我ping localhost:8080/login具有正确的数据,我就会获得成功授权,但是在我的应用程序中,当我尝试用httpclient localhost:8080/login发布具有正确的数据时,我会获得成功响应,但是头中没有标记,头是空的。

  • 每次我尝试用截击的POST方法时,我都会犯严重的错误。我在getCause中得到null值,在getNetworkResponse中得到一些默认值。toString()。 如果我使用GET方法,这工作正常(我从我的网址得到响应)。 有人能帮忙吗?我能做什么? 错误日志: 错误:错误:com.android.volley.服务器错误 更新:networkResponse。statusCode是404

  • 我从互联网上搜索了很多来设置凌空的请求超时。我最终得到了重试策略的解决方案,但当研究它不设置超时时,它会设置请求的重试时间,但我不想重试我的请求。我想增加凌空请求超时,以便较慢的网络可以访问数据,凌空超时设置为5秒,这意味着如果网络直到5秒才连接,它将抛出超时异常。我如何管理更改时间以从服务器获取响应。 我的代码是 我有两个问题-- (1) 它会在30秒后重试请求吗? (2)如何设置请求超时30秒

  • 所以我想打印响应的结果,然后使用gson为模型生成数据,但响应永远不会得到返回,因为调用了onResponse。! 如果你注意到Logcat,日志。我的回答没有显示。。!?但是在使用该请求的活动的onSuccess中,它通常会显示日志,但是如果日志包含响应对象,它不会显示哪个非常奇怪,也没有任何意义。。!? Logcat公司 我尝试使用具有相同url和参数的PostMan测试请求,它通常返回jso