我认为我的连接失败但我无法修复代码。
URL url = new URL( imageURL);
File file = new File(fileName);
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
当调试它在这部分代码中崩溃时。 我用
<uses-permission android:name="android.permission.INTERNET"/>
和
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
答案 0 :(得分:2)
在setContentView(R.layout.activity_main)之后将下面的代码写入MainActivity
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
答案 1 :(得分:0)
在android 3.0以上,您需要在单独的线程中完成所有网络连接。 因此,如果您在main thred中尝试该代码,它将抛出NetworkOnMainThread异常。
尝试此验证:
try{
URL url = new URL( imageURL);
File file = new File(fileName);
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
}
catch (android.os.NetworkOnMainThreadException ex){
// Skipp.
}
如果您的应用没有以这种方式崩溃,那么您需要使用AssyncTask进行网络连接。 Here is a good examplehow to。
并且不要忘记检查你的文件路径,就像@LucianNovac建议的那样。
答案 2 :(得分:0)
尝试像这样初始化文件:
File extStore = Environment.getExternalStorageDirectory();
File file = new File(extStore, fileName);
并且不要忘记输入您的清单文件
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
另外要避免网络异常,请将其放入asynk
class DownloadMyFIle extends AsyncTask<String, Void, DownloadProcess> {
private Exception exception;
protected DownloadProcess doInBackground(String... urls) {
try {
File extStore = Environment.getExternalStorageDirectory();
File file = new File(extStore, fileName);
....
} catch (Exception e) {
this.exception = e;
return null;
}
}
protected void onPostExecute(DownloadProcess process) {
// TODO: check this.exception
}
}