问题描述
我对此很陌生。我正在尝试在android studio上创建wifidirect应用,但是我有一个我不明白的错误:
2020-10-21 21:00:07.217 24543-24543/jeux.killer.test E/AndroidRuntime: FATAL EXCEPTION: main
Process: jeux.killer.test,PID: 24543
java.lang.NullPointerException: Attempt to invoke virtual method 'void jeux.killer.test.MainActivity$ServerClass.writeData(byte[])' on a null object reference
at jeux.killer.test.MainActivity$3.onClick(MainActivity.java:153)
at android.view.View.performClick(View.java:7448)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
所以我试图在153行检查并看到:
serverClass.writeData(bytes);
此行出现在我的方法exqListener中:
private void exqListener() {
btnOnOff.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
Intent panelIntent = new Intent(Settings.Panel.ACTION_WIFI);
startActivityForResult(panelIntent,545);
}
if (wifiManager.isWifiEnabled())
{
wifiManager.setWifiEnabled(false);
btnOnOff.setText("ON");
}
else
{
wifiManager.setWifiEnabled(true);
btnOnOff.setText("OFF");
}
btndiscover.setonClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
mManager.discoverPeers(mChannel,new wifip2pManager.ActionListener(){
@Override
public void onSuccess(){
connectionStatus.setText("discovery started");
}
@Override
public void onFailure(int i){
connectionStatus.setText("discovery starting Failed");
}
});
}
});
listView.setonItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,View view,int i,long l) {
final wifip2pDevice device = deviceArray[i];
wifip2pConfig config = new wifip2pConfig();
config.deviceAddress=device.deviceAddress;
mManager.connect(mChannel,config,new wifip2pManager.ActionListener(){
@Override
public void onSuccess(){
Toast.makeText(getApplicationContext(),"connected to"+device.deviceName,Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(int i){
Toast.makeText(getApplicationContext(),"unable to connect",Toast.LENGTH_SHORT).show();
}
});
}
});
}
});
btnSend.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msg = writeMsg.getText().toString();
byte[] bytes =msg.getBytes();
btnSend.setVisibility(View.INVISIBLE);
if(userType.equals("server")) {
serverClass.writeData(bytes);
} else if (userType.equals("client")){
clientClass.writeData(bytes);
}
}
});
}
并调用serverClass:
public class ServerClass extends AsyncTask<String,Integer,Boolean> {
Socket socket;
ServerSocket serverSocket;
InputStream inputStream = null;
OutputStream outputStream = new ByteArrayOutputStream(1024);
@Override
protected Boolean doInBackground(String... strings) {
boolean result = true;
try {
serverSocket = new ServerSocket(8888);
socket = serverSocket.accept();
} catch (IOException e) {
result = false;
e.printstacktrace();
}
return result;
}
public void writeData(final byte[] bytes) {
new Thread(new Runnable() {
@Override
public void run() {
try {
outputStream.write(bytes);
} catch (IOException e) {
e.printstacktrace();
}
}
}).start();
btnSend.setVisibility(View.VISIBLE);
}
@Override
protected void onPostExecute(Boolean result) {
if(result) {
try {
inputStream = socket.getInputStream();
outputStream = socket.getoutputStream();
} catch (IOException e) {
e.printstacktrace();
}
//listener
new Thread(new Runnable(){
public void run() {
byte[] buffer = new byte[1024];
int x;
while (socket!=null) {
try {
x = inputStream.read(buffer);
if(x>0) {
handler.obtainMessage(MESSAGE_READ,x,-1,buffer).sendToTarget();
}
} catch (IOException e) {
e.printstacktrace();
}
}
}
}).start();
btnSend.setVisibility(View.VISIBLE);
} else {
Toast.makeText(getApplicationContext(),"Could not create sockets",Toast.LENGTH_SHORT).show();
//restart socket assignment process
}
}
}
如果有人可以解释我在做什么,我将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)