Java Android-关于从服务器读取数据的问题

时间:2020-05-24 17:58:23

标签: java android sockets inputstream bufferedreader

两个月前,我开始学习有关Android(Java)和Android Studio的课程,但是我对其他语言更有信心 在我的应用程序中,我想读取从访问点传输的数据。

Server Reading from browser

此图显示了从服务器传输的数据。

我的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”。 你能帮我吗?

先谢谢您。

0 个答案:

没有答案