应用程序在插入文件

时间:2016-03-07 08:11:05

标签: java android file

我正在开发一款适用于互联网通话的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扩展了Activity {

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();
    }

2 个答案:

答案 0 :(得分:0)

首先,确保您已将明确的权限添加到清单中 android.permission.WRITE_EXTERNAL_STORAGE。

如果你有,那么我建议你不要使用硬编码的斜线,如#34; \"或" /"。而不是这个,使用File.separator,它将返回一个表示文件分隔符的String。

例如,您可以尝试将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();

答案 1 :(得分:0)

请将以下代码段添加到manifest.xml

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