提问者:小点点

为什么我的Android应用程序在任何Android设备上都会崩溃?


我无法理解为什么我的应用程序在任何android设备上都会崩溃。 它也不包含任何错误。 我要获取设备IP地址。 我可以在安卓系统中使用Java的InetAddress吗?或者我必须在安卓系统中使用其他的东西。 我需要任何明显的许可吗? 我的应用程序也不能在Android studio模拟器上运行。

这是Java密码

package com.example.testproject;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.net.InetAddress;

public class MainActivity extends AppCompatActivity {

    TextView tv = findViewById(R.id.tv);
    Button button = (Button)findViewById(R.id.btn);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tv.setText(getIpAddress());
            }
        });
    }

    public static String getIpAddress() {
        String ip = null;
        try {
            InetAddress inetAddress = InetAddress.getLocalHost();
            ip = inetAddress.getHostAddress();
        }
        catch (Exception e) {
            Log.d("Error", "Error");
        }
        return ip;
    }
}

这是xml代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">



    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/get_ip"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tv"
        app:layout_constraintVertical_bias="0.314" />

</androidx.constraintlayout.widget.ConstraintLayout>

共1个答案

匿名用户

您正在调用findViewById()来设置tv和button的值,然后函数调用onCreate,后者调用SetContentView(r.layout.activity_main)来膨胀布局。 所以这两个变量的值都为空。 而是在SetContentView(r.layout.activity_main)之后调用onCreate内部的FindViewById()

更新代码:

public class MainActivity extends AppCompatActivity {

   TextView tv;
   Button button ;

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.tv);
        button= (Button)findViewById(R.id.btn)        
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tv.setText(getIpAddress());
            }
        });
    }

public static String getIpAddress() {
    String ip = null;
    try {
        InetAddress inetAddress = InetAddress.getLocalHost();
        ip = inetAddress.getHostAddress();
    }
    catch (Exception e) {
        Log.d("Error", "Error");
    }
    return ip;
}

}