Openfileinput返回nullpointer异常

时间:2012-09-06 15:53:19

标签: java android file-io fileinputstream

我使用以下代码创建和写入文件

 FileOutputStream fOut = mcontext.openFileOutput("msg.txt",Context.MODE_WORLD_READABLE);
    OutputStreamWriter osw = new OutputStreamWriter(fOut);
    osw.write("abc");
    osw.flush();
    osw.close();

但是在LOG cat中,它在上面代码的第1行给出了空指针异常。

这是整个代码

public class Server implements Runnable 
{
private String address ="127.0.0.1";
private String add="127.0.0.2";
private static Context mcontext;
byte[] buf = new byte[256];
DatagramSocket socket;

@Override

public void run()

{
    try{

    InetAddress serveradd =  InetAddress.getByName(address);
    InetAddress clientadd = InetAddress.getByName(add);
    socket=new DatagramSocket(6000,serveradd);
    Log.d("UDP", "S: Connecting...");


    DatagramPacket packet=new DatagramPacket(buf,buf.length);
    socket.receive(packet);
    Log.d("UDP", "S: Receiving...");

    /* Receive the UDP-Packet */
    String data=new String(packet.getData());
    String phno=data.substring(0,9);
    String identity=data.substring(10,14);




    //FileWriter f = new FileWriter("/sdcard/download/msg.txt");
    // I/O operation
    FileOutputStream fOut = mcontext.openFileOutput("msg.txt",Context.MODE_WORLD_READABLE);
    OutputStreamWriter osw = new OutputStreamWriter(fOut);
    osw.write("gfdffg");
    osw.flush();
    osw.close();



    Log.d("UDP", "S: ReceivedJI: '" + new String(packet.getData()) + "'");
    Log.d("UDP", "S: Done.");
    //Toast.makeText(context.getApplicationContext(),"received"+new String(packet.getData()),Toast.LENGTH_LONG).show();
   // if(TextUtils.isDigitsOnly(phno) && identity.equals("novel"))
   // {
    byte[] bufsend =("hi").getBytes();
    Log.d("UDP", "S: sending.");
    DatagramPacket packetsend=new DatagramPacket(bufsend,bufsend.length,clientadd,5000);
    socket.send(packetsend);
    Log.d("UDP", "S: send.'"+bufsend+"'");
    //}
    //else
   // {
        //Log.d("UDP", "S: not matched.");
   // }
    }
    catch (Exception e)
    {
        Log.e("UDP", "S: Error", e);
        e.printStackTrace();
        //Toast.makeText(context.getApplicationContext(),"received"+e,Toast.LENGTH_LONG).show();    
    }

}

}

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

当您使用mcontext时,您尚未在代码中的任何位置设置它。所以变量是null。您应该为Runnable建设者提供接受Context

的构造函数
public Server(Context context) {
    mcontext = context;
}

所以你可以设置mcontext变量。另外,不要让它静止。

答案 1 :(得分:0)

将其添加到manifest.xml

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