Я загружаю файл с сервера. Я использую залп, чтобы сделать это.
Вот мой код
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
Я не понимаю, что является причиной сбоя, так как большинство сообщений об ошибках возвращает ноль. Я вполне уверен, что это происходит из-за истечения времени ожидания запроса, и я знаю, как увеличить время ожидания, но какой код я должен написать в прослушивателе ошибок, чтобы я мог получить правильное сообщение об ошибке в случае ошибки.