我有這樣的代碼,但在我的Android模擬器4.2我得到了如下錯誤:networkonmainthreadexception null
錯誤networkonmainthreadexception空
我是新來的Android,這是我的第一個應用程序,我有一個Web視圖後,我需要下載一個PDF並保存在SD卡中。
這是我的代碼:
browser.setDownloadListener(new DownloadListener()
{
public void onDownloadStart(final String url, String userAgent, String contentDisposition, String mimetype, long contentLength)
{
AlertDialog.Builder builder = new AlertDialog.Builder(WebViewdemoActivity.this);
builder.setTitle("Descarga");
builder.setMessage("¿Desea guardar el fichero en su tarjeta SD?");
builder.setCancelable(false).setPositiveButton("Aceptar", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
descargar(url);
}
}).setNegativeButton("Cancelar", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
dialog.cancel();
}
});
builder.create().show();
}
private void descargar(final String url)
{
String resultado ="";
//se obtiene el fichero con Apache HttpClient, API recomendada por Google
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
InputStream inputStream = null;
try
{
HttpResponse httpResponse = httpClient.execute(httpGet);
BufferedHttpEntity bufferedHttpEntity = new BufferedHttpEntity(httpResponse.getEntity());
inputStream = bufferedHttpEntity.getContent();
//se crea el fichero en el que se almacenará
String fileName = android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + "/webviewdemo";
File directorio = new File(fileName);
File file = new File(directorio, url.substring(url.lastIndexOf("/")));
//asegura que el directorio exista
directorio.mkdirs();
FileOutputStream fileOutputStream = new FileOutputStream(file);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while (inputStream.available() > 0 && (len = inputStream.read(buffer)) != -1)
{
byteArrayOutputStream.write(buffer, 0, len);
}
fileOutputStream.write(byteArrayOutputStream.toByteArray());
fileOutputStream.flush();
resultado = "guardado en : " + file.getAbsolutePath();
}
catch (Exception ex)
{
resultado = ex.getClass().getSimpleName() + " " + ex.getMessage();
}
finally
{
if (inputStream != null)
{
try
{
inputStream.close();
}
catch (IOException e)
{
}
}
}
AlertDialog.Builder builder = new AlertDialog.Builder(WebViewdemoActivity.this);
builder.setMessage(resultado).setPositiveButton("Aceptar", null).setTitle("Descarga");
builder.show();
}
});
不要在主線程中調用網絡操作,在後臺線程中執行! – Carnal
你應該在線程或AsyncTask中調用網絡。從3.0開始,主線程不支持網絡調用。 –