0

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

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

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

这是整个代码

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

}

}

任何帮助将不胜感激

4

2 回答 2

1

使用时,mcontext您没有在代码中的任何位置设置它。所以变量是null。你应该给你Runnable一个构造函数,它接受一个Context

public Server(Context context) {
    mcontext = context;
}

所以你可以设置 mcontext 变量。另外,不要让它成为静态的。

于 2012-09-06T16:07:57.500 回答
0

将此添加到 manifest.xml

           <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
于 2012-09-06T16:00:34.783 回答