我无法理解为什么我的应用程序在任何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>
您正在调用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;
}
}