2016-05-28 28 views
0

我已经声明变量目录为全局变量,并在我的returnData方法螺母中使用该变量,它返回值为null为什么我的方法会返回空值?

public void SaveImage(String FileName, Bitmap mBitmap) { 

    if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 
     String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString(); 

     File directory = new File(root + File.separator + "HMS_BARCODE"); 
     directory.mkdirs(); 
     //create a file to write bitmap data 
     File f = new File(directory, FileName + ".png"); 
     Log.e("dir", "" + directory); 
     try { 
      f.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      Log.e("IOException", "IOException"); 
     } 

     //Convert bitmap to byte array 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     mBitmap.compress(Bitmap.CompressFormat.PNG, 0, bos); 
     byte[] bytearray = bos.toByteArray(); 

     //Write bytes in file 
     FileOutputStream fos = null; 
     try { 
      fos = new FileOutputStream(f); 
      fos.write(bytearray); 
      fos.flush(); 
      fos.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.e("Exception", "" + e); 
     } 

    } else { 

     String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString(); 
     directory = new File(root + File.separator + "HMS_BARCODE"); 
     if (!directory.exists()) { 
      directory.mkdirs(); 
     } 

     File f = new File(directory, FileName + ".png"); 
     Log.e("dir1", "" + directory); 



     try { 
      f.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      Log.e("IOException", "IOException"); 
     } 
     Log.e("dir1", "" + directory); 

     //Convert bitmap to byte array 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     mBitmap.compress(Bitmap.CompressFormat.PNG, 0, bos); 
     byte[] bytearray = bos.toByteArray(); 

     //Write bytes in file 
     FileOutputStream fos = null; 
     try { 
      fos = new FileOutputStream(f); 
      fos.write(bytearray); 
      fos.flush(); 
      fos.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.e("Exception", "" + e); 
     } 

    } 


} 

// this is method returning null value I want want that directory 
// value to pass to another class 
public File returnData() { 
    Log.e("Exception", "" + directory); 
    return directory; 
} 
+1

我们可以有logcat的? –

+0

因为https://en.wikipedia.org/wiki/Variable_shadowing – njzk2

回答

1

请正确格式化您的问题,它很难阅读。从我可以看到你的目录变量不是全局的,它是本地的saveImage方法。

如果您想要从同一个类实例的不同方法访问目录变量,则需要将其声明为类变量。例如:

public class MyClass { 

    private File directory; 

    public void saveImage(...) {....} 

    public File returnData(...) {...} 
} 
+0

我已经宣布它仅作为全局使用 –

+0

@ShivarajRajagolkar我无法在代码中看到它,但假设您已全局声明它,那么您实际上将它隐藏在saveImage方法,当你做'文件目录=新文件(根+ File.separator +“HMS_BARCODE”);' –

+0

其实我只是其中一部分.. –

0

必须调用SaveImage方法在returnData方法:

//this is method returning null value i  want want that directory value to  pass to another class 
public File returnData(){ 
    SaveImage(.../*the parameters*/); 
    Log.e("Exception", "" + directory); 
    return directory; 
} 
相关问题