[英]android: after click on button app crash
您好,我是 android 應用程序開發和 Java 的新手。 我使用了一些來自互聯網的代碼以及 Android Studio 生成的代碼。 它需要通過套接字將字符串發送到 wifi 屏蔽罩來控制裝有貨物的小船。 當我調試我的應用程序時它會啟動,但是當我單擊任何按鈕時它會崩潰。 我嘗試使用 logcat 來查找問題,但它沒有顯示任何內容。 我使用了一些我在 stackoverflow 上找到的錯誤范圍,它是在設備上設置的。 當我嘗試 seekBar 時,應用程序不會崩潰,並且單擊后不會顯示吐司。
在我對代碼進行檢查后,我發現了這一點:
“公共”方法 buttonConnectOnClickListener() 未通過第 69 行的接口公開
它向我展示了每個按鈕偵聽器上的相同問題,但我不知道如何解決它。
這是 Main.java:
package tomasbenco.kop_android_controller;
import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.Switch;
import android.widget.Toast;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Main extends Activity {
private Button C1Button = null;
private Button C2Button = null;
private Switch lightsSwitch = null;
private SeekBar RESB = null;
private SeekBar LESB = null;
private Boolean connected = Boolean.FALSE;
private DataOutputStream dataOutputStream = null;
private Socket socket = null;
private char[] transferReg = new char[7];
private void setTransferReg(char transferReg, int i) {
this.transferReg[i] = transferReg;
}
private char[] getTransferReg() {
return transferReg;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
C1Button = (Button) findViewById(R.id.C1Button);
C2Button = (Button) findViewById(R.id.C2Button);
lightsSwitch = (Switch) findViewById(R.id.LightsSwitch);
RESB = (SeekBar) findViewById(R.id.REseekBar);
LESB = (SeekBar) findViewById(R.id.LEseekBar);
}
private void changeConnectionStatus(Boolean isConnected) {
connected = isConnected;
if (isConnected) {
C1Button.setVisibility(View.VISIBLE);
C2Button.setVisibility(View.VISIBLE);
lightsSwitch.setVisibility(View.VISIBLE);
RESB.setVisibility(View.VISIBLE);
LESB.setVisibility(View.VISIBLE);
} else {
C1Button.setVisibility(View.INVISIBLE);
C2Button.setVisibility(View.INVISIBLE);
lightsSwitch.setVisibility(View.INVISIBLE);
RESB.setVisibility(View.INVISIBLE);
LESB.setVisibility(View.INVISIBLE);
}
}
public void buttonConnectOnClickListener(View view) {
ConnectivityManager connectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiInfo = connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifiInfo.isConnected()) {
if (!connected) {
try {
socket = new Socket("192.168.137.1", 55555);
Toast msg = Toast.makeText(Main.this,
"Connected Successfully", Toast.LENGTH_LONG);
msg.show();
dataOutputStream = new DataOutputStream(socket.getOutputStream());
changeConnectionStatus(Boolean.TRUE);
} catch (IOException e) {
changeConnectionStatus(Boolean.FALSE);
}
} else {
try {
socket.close();
Toast msg = Toast.makeText(Main.this, "Disconnected Successfully", Toast.LENGTH_LONG);
msg.show();
changeConnectionStatus(Boolean.FALSE);
} catch (UnknownHostException e) {
changeConnectionStatus(Boolean.FALSE);
} catch (IOException e) {
changeConnectionStatus(Boolean.FALSE);
}
}
} else {
Toast msg = Toast.makeText(Main.this, "Wifi is not connected !", Toast.LENGTH_LONG);
msg.show();
}
}
public void C1ButtonOnClickListener(View view) {
if (C1Button.isActivated()) {
Toast msg = Toast.makeText(Main.this, "Front cargo bay is opening !", Toast.LENGTH_LONG);
msg.show();
transfer_REG(4, '1');
} else {
Toast msg = Toast.makeText(Main.this, "Front cargo bay is closing !", Toast.LENGTH_LONG);
msg.show();
transfer_REG(4, '0');
}
}
public void C2ButtonOnClickListener(View view) {
if (C2Button.isActivated()) {
Toast msg = Toast.makeText(Main.this, "Back cargo bay is opening !", Toast.LENGTH_LONG);
msg.show();
transfer_REG(5, '1');
} else {
Toast msg = Toast.makeText(Main.this, "Back cargo bay is closing !", Toast.LENGTH_LONG);
msg.show();
transfer_REG(5, '0');
}
}
public void lightsButtonOnClickListener(View view) {
if (C2Button.isActivated()) {
Toast msg = Toast.makeText(Main.this, "Back cargo bay is opening !", Toast.LENGTH_LONG);
msg.show();
transfer_REG(6, '1');
} else {
Toast msg = Toast.makeText(Main.this, "Back cargo bay is closing !", Toast.LENGTH_LONG);
msg.show();
transfer_REG(6, '0');
}
}
private void transfer_REG(int i, char trans) {
setTransferReg(trans, i);
String transfer = new String(getTransferReg());
if (connected) try {
dataOutputStream.writeChars(transfer);
} catch (IOException ignored) {
}
}
public void REListener(View view) {
if (RESB.getProgress() < 10) {
transfer_REG(2, Integer.toString(RESB.getProgress()).charAt(0));
transfer_REG(3, '1');
} else {
transfer_REG(2, Integer.toString(RESB.getProgress() - 10).charAt(0));
transfer_REG(3, '0');
}
}
public void LEListener(View view) {
if (LESB.getProgress() < 10) {
transfer_REG(1, Integer.toString(LESB.getProgress()).charAt(0));
transfer_REG(2, '1');
Toast msg = Toast.makeText(Main.this, "Left engine power is: -" + Integer.toString(LESB.getProgress()).charAt(0), Toast.LENGTH_LONG);
msg.show();
} else {
transfer_REG(1, Integer.toString(LESB.getProgress() - 10).charAt(0));
transfer_REG(2, '0');
Toast msg = Toast.makeText(Main.this, "Left engine power is: " + Integer.toString(LESB.getProgress() - 10).charAt(0), Toast.LENGTH_LONG);
msg.show();
}
}
}
這是 Main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
style="@android:style/Theme.Holo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Main">
<TextView
android:id="@+id/REtView"
style="@android:style/Theme.Holo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/REseekBar"
android:layout_alignParentEnd="true"
android:text="@string/RE"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffaec0ff"
android:textStyle="bold|italic"
android:theme="@style/Holo"
android:visibility="visible" />
<TextView
android:id="@+id/LEtView"
style="@android:style/Theme.Holo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/LEseekBar"
android:layout_alignParentStart="true"
android:text="@string/LE"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#ffaec0ff"
android:textStyle="bold|italic"
android:theme="@style/Holo"
android:visibility="visible" />
<SeekBar
android:id="@+id/LEseekBar"
style="@android:style/Theme.Holo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_toStartOf="@+id/LightsSwitch"
android:clickable="true"
android:max="20"
android:onClick="LEListener"
android:progress="10"
android:theme="@style/Holo"
android:visibility="visible" />
<SeekBar
android:id="@+id/REseekBar"
style="@android:style/Theme.Holo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/REtView"
android:layout_alignParentBottom="true"
android:layout_toEndOf="@+id/LightsSwitch"
android:clickable="true"
android:max="20"
android:onClick="REListener"
android:progress="10"
android:theme="@style/Holo"
android:visibility="visible" />
<Button
android:id="@+id/connButton"
style="@android:style/Theme.Holo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:clickable="true"
android:onClick="buttonConnectOnClickListener"
android:text="@string/conn"
android:textColor="#ffaec0ff"
android:textStyle="normal"
android:theme="@style/Holo"
android:typeface="normal"
android:visibility="visible" />
<Button
android:id="@+id/C1Button"
style="@android:style/Theme.Holo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:clickable="true"
android:onClick="C1ButtonOnClickListener"
android:text="@string/C1"
android:textColor="#ffaec0ff"
android:textStyle="normal"
android:theme="@style/Holo"
android:visibility="visible" />
<Button
android:id="@+id/C2Button"
style="@android:style/Theme.Holo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/C1Button"
android:layout_centerHorizontal="true"
android:clickable="true"
android:onClick="C2ButtonOnClickListener"
android:text="@string/C2"
android:textColor="#ffaec0ff"
android:textStyle="normal"
android:theme="@style/Holo"
android:visibility="visible" />
<Switch
android:id="@+id/LightsSwitch"
style="@android:style/Theme.Holo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/C2Button"
android:layout_centerHorizontal="true"
android:checked="true"
android:clickable="true"
android:onClick="lightsButtonOnClickListener"
android:showText="false"
android:singleLine="true"
android:text="@string/light"
android:textColor="#ffaec0ff"
android:textStyle="normal"
android:theme="@style/Holo"
android:visibility="visible" />
這是 manifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo">
<activity
android:name=".Main"
android:configChanges="keyboard|keyboardHidden"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
試試下面的代碼,
像其余兩個按鈕一樣全局聲明按鈕;
private Button connButton;
將此代碼放在您聲明所有 ID 的位置。
connButton = (Button) findViewById(R.id.connButton);
你能在你的 android manifest 中看到你是否有這個權限嗎?
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
我試圖復制您的代碼並執行,這就是我使用頂部按鈕遇到的問題。 一旦將其添加到 Android 清單中,問題就解決了。
由於您沒有發布 AndroidManifest.xml,因此很難說您可能在那里聲明了哪個權限。 那么您可以檢查一下是否已經存在,如果沒有,您可以添加並嘗試嗎?
我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.