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では、上記のコードの1行目にnullポインター例外が発生します。

これがコード全体です

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 に答える