2016-03-07 65 views
0

我正在开发一个Android应用程序来进行相互调用。呼叫拦截部分工作正常!但是当我尝试将电话号码保存到文件中时,应用程序崩溃。我不是Android编程的专家。应用程序在插入文件时崩溃

这是我的Java类:

private class CallStateListener extends PhoneStateListener { 
     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 
     switch (state) { 
      case TelephonyManager.CALL_STATE_RINGING: 
       // called when someone is ringing to this phone 
       Toast.makeText(ctx,"Incoming: "+incomingNumber, 
         Toast.LENGTH_LONG).show(); 
       ob.write(incomingNumber); 
       break; 
     } 

OB是MainActivity的对象。 write()是MainActivity中的公共方法。我的MainActivity是如下: 公共类MainActivity扩展活动{

private boolean detectEnabled; 

private TextView textViewDetectState; 
private Button buttonToggleDetect; 
private Button buttonExit; 

public void write(String a) { 

    try { 
     File sdcard=getExternalFilesDir(null); 
     File directory=new File(sdcard.getAbsolutePath()+"/MyFiles"); 
     directory.mkdir(); 
     File file=new File(directory,"CALLS.txt"); 
     FileOutputStream fout=new FileOutputStream(file); 
     OutputStreamWriter osw=new OutputStreamWriter(fout); 
     osw.append(a); 
     osw.close(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (NullPointerException e) { 
     e.printStackTrace(); 
    } 
+0

什么(精确)错误你得到?您是否在清单中设置了正确的权限? <使用权限的android:name =“android.permission.WRITE_EXTERNAL_STORAGE”/> – Lonzak

回答

0

首先,确保你有适当的权限添加到您的清单 android.permission.WRITE_EXTERNAL_STORAGE。

如果你有它,那么我建议你不要使用像“\”或“/”这样的硬编码斜线。而不是使用File.separator,它将返回一个代表文件分隔符的字符串。

举个例子,你可以尝试写TE内容到您的文件中像这样:

byte data[] = yourString.getBytes(); 
String path = "your path"; 
String name = "your file name"; 
FileOutputStream out = new FileOutputStream(path+File.separator+name); 
out.write(data); 
out.close(); 
0

请下面的代码片段添加到您的manifest.xml

<uses-permission 
android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
android:maxSdkVersion="18" /> 
+0

权限是有..仍然我得到的消息在日志猫是致命的例外! –

+0

可以发布日志吗? –