无法从内部存储空间

时间:2016-01-25 05:50:14

标签: android android-sqlite android-imageview android-bitmap internal-storage

我正在尝试从内存中添加图像。

我正在尝试将此代码用于

        ImageView message_image=(ImageView)v.findViewById(R.id.message_image);
        File imgFile = new File(img_db);
        Log.e("img_db",img_db+"------------->");
        if(imgFile.exists()){

        Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
            message_image.setImageBitmap(myBitmap);
         }

这里img_db是我从我的Sqlite表中获取的路径。当我记录它时,我得到了像这样的fath

  

E / img_db:file:///storage/sdcard0/download/img11024FILE.jpg------------->

我已经在我的清单

中给予了这个许可
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

下载图片并保存到手机我正在使用此代码

  public String downloadFile(String url_i_) {

    try {


        URL url
                = new URL(url_i_);
        Log.e("url_fetch--->img", String.valueOf(url));

        HttpURLConnection urlConnection = (HttpURLConnection) url
                .openConnection();
        urlConnection.setRequestMethod("GET");
        urlConnection.setDoOutput(true);

        // connect
        urlConnection.connect();

        // set the path where we want to save the file
        SDCardRoot = Environment.getExternalStorageDirectory();
        // create a new file, to save the downloaded file
        rand = new External_function().getnRandom();
        file = new File(SDCardRoot, "/download/img" + rand+".jpg");
        FileOutputStream fileOutput = new FileOutputStream(file);
        InputStream inputStream = urlConnection.getInputStream();
        // this is the total size of the file which we are downloading
        totalSize = urlConnection.getContentLength();



        // create a buffer...
        byte[] buffer = new byte[1024];
        int bufferLength = 0;

        while ((bufferLength = inputStream.read(buffer)) > 0) {
            fileOutput.write(buffer, 0, bufferLength);
            downloadedSize += bufferLength;
            // update the progressbar //


                    float per = ((float) downloadedSize / totalSize) * 100;
                    /*cur_val.setText("Downloading.... " + downloadedSize
                            + "KB / " + totalSize + "KB (" + (int) per
                            + "%)");*/
                    String i = "Downloading.... " + downloadedSize
                            + "KB / " + totalSize + "KB (" + (int) per
                            + "%)";


        }

        fileOutput.close();




        file = new File(Environment.getExternalStorageDirectory() + "/download/img" + rand+".jpg"); // set your audio path
                file_path= String.valueOf(Uri.fromFile(file));





    }  catch (final Exception e) {
        Log.e("////////////////file", String.valueOf(e));
    }
    return file_path;
}

在我的服务类中,当我得到图像路径作为回报然后我将它存储在我的sqlite表中,就像这样

   String img = socketOperator.downloadFile(event_img);
                localstoragehandler.insert(id, msg_user_by, msg_read_by, msg_content, msg_grp_id, ms‌​g_sent_time,type,event_time,event_lat,event_log,event_name,event_address,img); 

我用图片和id检查了路径是一样的。我试试这个但是真的不知道我做错了什么。

2 个答案:

答案 0 :(得分:1)

您需要此权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

阅读 _EXTERNAL_STORAGE而非WRITE_EXTERNAL_STORAGE

答案 1 :(得分:0)

@CommonsWare已经回答了这个问题。尝试改变你的道路。 (Original Answer

  

为什么会发生这种情况?

由于多年来外部存储路径发生了变化,因此您首先应该从未对路径进行硬编码。

  

如何在更正式和正确的#34;中获取路径目录?办法   而不是硬编码路径?

使用Environment.getExternalStorageDirectory()。

在您的测试环境中,/ sdcard是符号链接或/ storage / sdcard0的硬链接,由设备制造商设置。但是,并不能保证所有设备都有这样的/ sdcard符号链接。

如果这对您没有帮助。这肯定会:Reading from internal storage.

  

更新

请查找此内容的所有用法&#34; / download / img&#34; ...

你错过了&#34; /&#34; ...将其替换为&#34; / download / img /&#34;