Java 在Android上本地存储来自互联网的图像
我需要在android设备上本地存储一些从互联网上获取的图像,以便以后更快地显示 我写了这段代码,我没有得到任何异常,但是当我尝试重新加载图像时,我得到一个FileNotFoundExceptionJava 在Android上本地存储来自互联网的图像,java,android,caching,bitmap,httpurlconnection,Java,Android,Caching,Bitmap,Httpurlconnection,我需要在android设备上本地存储一些从互联网上获取的图像,以便以后更快地显示 我写了这段代码,我没有得到任何异常,但是当我尝试重新加载图像时,我得到一个FileNotFoundException public String md5(String s) { try { // Create MD5 Hash MessageDigest digest = java.security.MessageDigest .getInst
public String md5(String s) {
try {
// Create MD5 Hash
MessageDigest digest = java.security.MessageDigest
.getInstance("MD5");
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < messageDigest.length; i++)
hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
public boolean saveImage() {
fileName = this.md5(fullURL);
URL ulrn = new URL(fullURL);
HttpURLConnection con = (HttpURLConnection) ulrn.openConnection();
InputStream is = con.getInputStream();
Bitmap bmp = BitmapFactory.decodeStream(is);
File f = new File(cacheImagePath, filename); // cacheImagePath is
// /data/data/com.mycompany.myapp/cache/
try {
if (f.exists()) {
f.delete();
}
f.createNewFile();
FileOutputStream out = new FileOutputStream(f);
bm.compress(Bitmap.CompressFormat.JPEG, 92, out);
out.flush();
out.close();
return true;
} catch (Exception e) {
Log.e("Exception", "saveImage " + filename);
e.printStackTrace();
return false;
}
}
公共字符串md5(字符串s){
试一试{
//创建MD5散列
MessageDigest=java.security.MessageDigest
.getInstance(“MD5”);
更新(s.getBytes());
字节messageDigest[]=digest.digest();
//创建十六进制字符串
StringBuffer hexString=新的StringBuffer();
for(int i=0;i
编辑:
尝试访问文件时出现LogCat错误:
06-20 14:39:11.965: W/System.err(560): java.io.FileNotFoundException: /data/data/com.accessdev.tellmeplus/cache/files/tagpromo-d3d908befad2892c35f3ba957d5c18 (No such file or directory)
06-20 14:39:11.965: W/System.err(560): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
06-20 14:39:11.965: W/System.err(560): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
06-20 14:39:11.965: W/System.err(560): at java.io.FileInputStream.<init>(FileInputStream.java:80)
06-20 14:39:11.965: W/System.err(560): at java.io.FileInputStream.<init>(FileInputStream.java:132)
06-20 14:39:11.965: W/System.err(560): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:362)
06-20 14:39:11.965: W/System.err(560): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:412)
06-20 14:39:11.965: W/System.err(560): at com.accessdev.tellmeplus.TMPOfferImageAdapter.createBitmap(TMPOfferImageAdapter.java:124)
06-20 14:39:11.970: W/System.err(560): at pl.polidea.coverflow.AbstractCoverFlowImageAdapter.getItem(AbstractCoverFlowImageAdapter.java:70)
06-20 14:39:11.970: W/System.err(560): at pl.polidea.coverflow.AbstractCoverFlowImageAdapter.getView(AbstractCoverFlowImageAdapter.java:111)
06-20 14:39:11.970: W/System.err(560): at pl.polidea.coverflow.AbstractCoverFlowImageAdapter.getView(AbstractCoverFlowImageAdapter.java:1)
06-20 14:39:11.970: W/System.err(560): at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192)
06-20 14:39:11.970: W/System.err(560): at android.view.View.measure(View.java:8366)
06-20 14:39:11.970: W/System.err(560): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.970: W/System.err(560): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
06-20 14:39:11.970: W/System.err(560): at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
06-20 14:39:11.970: W/System.err(560): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
06-20 14:39:11.970: W/System.err(560): at android.view.View.measure(View.java:8366)
06-20 14:39:11.975: W/System.err(560): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.975: W/System.err(560): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-20 14:39:11.975: W/System.err(560): at android.view.View.measure(View.java:8366)
06-20 14:39:11.975: W/System.err(560): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.975: W/System.err(560): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-20 14:39:11.975: W/System.err(560): at android.view.View.measure(View.java:8366)
06-20 14:39:11.975: W/System.err(560): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.975: W/System.err(560): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-20 14:39:11.975: W/System.err(560): at android.view.View.measure(View.java:8366)
06-20 14:39:11.975: W/System.err(560): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.975: W/System.err(560): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
06-20 14:39:11.975: W/System.err(560): at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
06-20 14:39:11.975: W/System.err(560): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
06-20 14:39:11.980: W/System.err(560): at android.view.View.measure(View.java:8366)
06-20 14:39:11.980: W/System.err(560): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.980: W/System.err(560): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-20 14:39:11.980: W/System.err(560): at android.view.View.measure(View.java:8366)
06-20 14:39:11.980: W/System.err(560): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.980: W/System.err(560): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-20 14:39:11.980: W/System.err(560): at android.view.View.measure(View.java:8366)
06-20 14:39:11.980: W/System.err(560): at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
06-20 14:39:11.980: W/System.err(560): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
06-20 14:39:11.985: W/System.err(560): at android.view.View.measure(View.java:8366)
06-20 14:39:11.985: W/System.err(560): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.985: W/System.err(560): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-20 14:39:11.985: W/System.err(560): at android.view.View.measure(View.java:8366)
06-20 14:39:11.985: W/System.err(560): at android.view.ViewRoot.performTraversals(ViewRoot.java:847)
06-20 14:39:11.985: W/System.err(560): at android.view.ViewRoot.handleMessage(ViewRoot.java:1868)
06-20 14:39:11.985: W/System.err(560): at android.os.Handler.dispatchMessage(Handler.java:99)
06-20 14:39:11.985: W/System.err(560): at android.os.Looper.loop(Looper.java:130)
06-20 14:39:11.990: W/System.err(560): at android.app.ActivityThread.main(ActivityThread.java:3691)
06-20 14:39:11.990: W/System.err(560): at java.lang.reflect.Method.invokeNative(Native Method)
06-20 14:39:11.990: W/System.err(560): at java.lang.reflect.Method.invoke(Method.java:507)
06-20 14:39:11.990: W/System.err(560): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
06-20 14:39:11.990: W/System.err(560): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
06-20 14:39:11.990: W/System.err(560): at dalvik.system.NativeStart.main(Native Method)
06-20 14:39:11.965:W/System.err(560):java.io.FileNotFoundException:/data/data/com.accessdev.tellmeplus/cache/files/tagpromo-d3d908befad2892c35f3ba957d5c18(无此类文件或目录)
06-20 14:39:11.965:W/System.err(560):位于org.apache.harmony.luni.platform.OSFileSystem.open(本机方法)
06-20 14:39:11.965:W/System.err(560):在dalvik.System.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
06-20 14:39:11.965:W/System.err(560):位于java.io.FileInputStream。(FileInputStream.java:80)
06-20 14:39:11.965:W/System.err(560):位于java.io.FileInputStream。(FileInputStream.java:132)
06-20 14:39:11.965:W/System.err(560):位于android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:362)
06-20 14:39:11.965:W/System.err(560):位于android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:412)
06-20 14:39:11.965:W/System.err(560):位于com.accessdev.tellmeplus.TMPOfferImageAdapter.createBitmap(TMPOfferImageAdapter.java:124)
06-20 14:39:11.970:W/System.err(560):位于pl.polidea.coverflow.AbstractCoverFlowImageAdapter.getItem(AbstractCoverFlowImageAdapter.java:70)
06-20 14:39:11.970:W/System.err(560):位于pl.polidea.coverflow.AbstractCoverFlowImageAdapter.getView(AbstractCoverFlowImageAdapter.java:111)
06-20 14:39:11.970:W/System.err(560):位于pl.polidea.coverflow.AbstractCoverFlowImageAdapter.getView(AbstractCoverFlowImageAdapter.java:1)
06-20 14:39:11.970:W/System.err(560):位于android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192)
06-20 14:39:11.970:W/System.err(560):在android.view.view.measure(view.java:8366)上
06-20 14:39:11.970:W/System.err(560):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.970:W/System.err(560):在android.widget.LinearLayout.measurechildbeforerelayout(LinearLayout.java:1017)
06-20 14:39:11.970:W/System.err(560):在android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
06-20 14:39:11.970:W/System.err(560):位于android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
06-20 14:39:11.970:W/System.err(560):在android.view.view.measure(view.java:8366)上
06-20 14:39:11.975:W/System.err(560):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.975:W/System.err(560):位于android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-20 14:39:11.975:W/System.err(560):在android.view.view.measure(view.java:8366)上
06-20 14:39:11.975:W/System.err(560):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.975:W/System.err(560):位于android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-20 14:39:11.975:W/System.err(560):在android.view.view.measure(view.java:8366)上
06-20 14:39:11.975:W/System.err(560):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.975:W/System.err(560):位于android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-20 14:39:11.975:W/System.err(560):在android.view.view.measure(view.java:8366)上
06-20 14:39:11.975:W/System.err(560):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.975:W/System.err(560):在android.widget.LinearLayout.measurechildbeforerelayout(LinearLayout.java:1017)
06-20 14:39:11.975:W/System.err(560):在android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
06-20 14:39:11.975:W/System.err(560):位于android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
06-20 14:39:11.980:W/System.err(560):在android.view.view.measure(view.java:8366)上
06-20 14:39:11.980:W/System.err(560):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.980:W/System.err(560):位于android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-20 14:39:11.980:W/System.err(560):在android.view.view.measure(view.java:8366)上
06-20 14:39:11.980:W/System.err(560):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
06-20 14:39:11.980:W/System.err(560):位于android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
06-20 14:39:11.980:W/System.err(560):在android.view.view.measure(view.java:8366)上
06-20 14:39:11.980:W/System.err(560):在android.widget.LinearLayout.measureVertical(LinearLa)上
try {
URL url = new URL(image_URL);
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
String PATH = Environment.getExternalStorageDirectory().toString();
Log.v("LOG_TAG", "PATH: " + PATH);
File file = new File(PATH);
file.mkdirs();
String fileName = image.jpg;
File outputFile = new File(file, fileName);
FileOutputStream fos = new FileOutputStream(outputFile);
InputStream is = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();
// Toast.makeText(this, "Downloaded Successfully", 600).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />