2016-03-07 62 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

可以發佈日誌嗎? –