如何动态地将文本设置到TextView?

5
我希望在活动开始时显示已连接的SSID和IP地址。它包含一个图像视图(用于标题,因为我不使用操作栏)和4个文本视图(SSID标签、SSID值、IP地址标签和IP地址值)。
我已经测试了获取SSID和IP地址的代码,并且它们工作正常。问题是我无法将它们显示到TextView中。
在这段代码中,没有错误,但是当活动开始时,程序会崩溃或停止工作。
以下是我的Java代码:
import android.app.Activity;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;

public class ConnectionInfoActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    TextView ssid = (TextView) findViewById (R.id.ssid);
    TextView ip = (TextView) findViewById (R.id.ipaddr);

    ssid.setText(getSsid());
    ip.setText(getIpAddr());

    setContentView(R.layout.activity_connection_info);
}   

// Get the connected network SSID
private String getSsid() {
    WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    String ssid = null;

    ssid = wifiInfo.getSSID();

    return ssid;
}

// Get the network IP Address
private String getIpAddr() {
    WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    int ip = wifiInfo.getIpAddress();

    String ipString = null;
    ipString = String.format(
        "%d.%d.%d.%d",
        (ip & 0xff),
        (ip >> 8 & 0xff),
        (ip >> 16 & 0xff),
        (ip >> 24 & 0xff));

    return ipString;
    }
}

布局XML文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/coninfo_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:orientation="vertical" >

<ImageView
    android:id="@+id/title_conInfo"
    android:layout_width="fill_parent"
    android:layout_height="44.5dp"
    android:src="@drawable/header_coninfo" />

<TableLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TableRow>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textSize="20sp"
            android:text="SSID" />
        <TextView
            android:id="@+id/ssid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textSize="20sp"
            android:text="" />
    </TableRow>

    <TableRow>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textSize="20sp"
            android:text="IP Address" />
        <TextView
            android:id="@+id/ipaddr"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textSize="20sp"
            android:text="" />
    </TableRow>
</TableLayout>


你是否记录了这些值并查看它们是否正确记录了有关网络的信息? - KOTIOS
2个回答

14

在查找视图之后设置内容视图是不正确的,应该在之前设置内容视图。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_connection_info);
    TextView ssid = (TextView) findViewById (R.id.ssid);
    TextView ip = (TextView) findViewById (R.id.ipaddr);

    ssid.setText(getSsid());
    ip.setText(getIpAddr());
} 

哇,它起作用了。我花了几个星期的时间寻找答案来解决这个问题,甚至尝试通过编写显示布局的程序代码来解决。没想到答案如此简单。非常感谢你,Johan :) - grayfield

1

setContentView(R.layout.activity_connection_info);之前,您无法操作视图元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接