我使用以下代码创建和写入文件
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();
}
}
}
任何帮助将不胜感激
答案 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"/>