两个月前,我开始学习有关Android(Java)和Android Studio的课程,但是我对其他语言更有信心 在我的应用程序中,我想读取从访问点传输的数据。
此图显示了从服务器传输的数据。
我的AndroidManifestxml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.clientespreader">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<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:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
我的MainActivity.java:
package com.example.clientespreader;
import androidx.appcompat.app.AppCompatActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.List;
public class MainActivity extends AppCompatActivity {
Button btnwifi;
WifiManager wifiManager;
TextView txt_msg, txt_header;
private PrintWriter output;
private BufferedReader input;
Thread Thread1 = null;
String value_read;
InputStream inputStream;
Socket socket;
String SERVER_IP = "xxx.xxx.xxx.xxx";
int SERVER_PORT = 80;
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnwifi = findViewById(R.id.button_wifi);
txt_msg = findViewById(R.id.text_msg);
txt_header = findViewById(R.id.txt_header);
wifiManager= (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
}
public void OnClickButtonWIfi(View view) {
if(wifiManager.isWifiEnabled()){
wifiManager.setWifiEnabled(false);
Toast.makeText(getApplicationContext(), "Wifi Disabled!", Toast.LENGTH_SHORT).show();
btnwifi.setText(R.string.button_wifi_enable);
}else{
wifiManager.setWifiEnabled(true);
Toast.makeText(getApplicationContext(), "Wifi Enabled!", Toast.LENGTH_SHORT).show();
btnwifi.setText(R.string.button_wifi_disable);
}
}
class Thread1 implements Runnable {
public void run() {
try {
socket = new Socket(SERVER_IP, SERVER_PORT);
output = new PrintWriter(socket.getOutputStream());
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
inputStream = socket.getInputStream();
if(socket.isConnected()){
InetAddress[] addresses = InetAddress.getAllByName(SERVER_IP);
for (final InetAddress address : addresses) {
if (address.isReachable(10000))
{
runOnUiThread(new Runnable() {
@Override
public void run() {
txt_header.append("Connected to "+ address.toString());
}
});
new Thread(new Thread2()).start();
}
else { }
}
}else{
Thread1 = new Thread(new Thread1());
Thread1.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Thread2 implements Runnable {
@Override
public void run() {
while (true) {
try {
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
final String message = input.readLine();
runOnUiThread(new Runnable() {
@Override
public void run() {
txt_msg.setText("Message : " + message);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void OnClickButtonRead(View view) {
Thread1 = new Thread(new Thread1());
Thread1.start();
}
activity_main.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">
<Button
android:id="@+id/button_read"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="32dp"
android:layout_toEndOf="@+id/button_wifi"
android:onClick="OnClickButtonRead"
android:text="@string/start"
app:layout_constraintBaseline_toBaselineOf="@+id/button_wifi"
app:layout_constraintEnd_toEndOf="parent" />
<Button
android:id="@+id/button_wifi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="32dp"
android:layout_marginTop="32dp"
android:onClick="OnClickButtonWIfi"
android:text="@string/button_wifi_enable"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/txt_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="32dp"
android:layout_marginTop="32dp"
android:text="STATUS: "
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_wifi" />
<TextView
android:id="@+id/text_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="32dp"
android:text="MESSAGE: "
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txt_header" />
注意:出于隐私考虑,我删除了IP 目前,“启用Wi-fi”按钮没有用,因为我在AccessPoint上手动连接了智能手机。 “ START”按钮可验证与服务器的连接并读取数据。
APP GUI 不幸的是,结果始终为“ null”。 你能帮我吗?
先谢谢您。