簡體   English   中英

android:點擊按鈕后應用程序崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM