ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ, когда я использую PrintWriter.println () на моем сервере в Android Studio - PullRequest
0 голосов
/ 16 июня 2020

У меня есть сервер в Android Studio, который я использую для сохранения результатов в таблице лидеров. Когда я нажимаю «Отправить», я отправляю строку, например: «Save Score-Alex, 15000». В моей базе данных сохраняется как Имя: Alex: Значение: "-Alex,,15000". Когда я пытаюсь вернуть свои значения, я получаю сообщение об ошибке "32413-32413/com.example.serverapp E/AndroidRuntime: FATAL EXCEPTION: main" на "writer.println(data)". Я могу отправить его в базу данных из своего приложения, но когда я пытаюсь вернуть его с помощью писателя, я получаю эту ошибку. переменная данных содержит допустимую строку. Я попробовал .print (), и ошибка исчезла, но я все еще не получаю данные в своем приложении.

Сервер:

    package com.example.serverapp

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.ValueEventListener
import java.io.*
import java.net.InetAddress
import java.net.ServerSocket
import java.net.Socket
import java.nio.charset.Charset
import java.util.*
import kotlin.concurrent.thread


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val server = ServerSocket(8888,10, InetAddress.getByName("0.0.0.0"))

        val database = FirebaseDatabase.getInstance()
        val databaseReference = database.getReference()
        println("Server is running on port ${server.localPort}")
        thread{run{
            val  client= server.accept()
            println("Client connected: ${client.inetAddress.hostAddress}")
            thread{
                run{
                    val reader = BufferedReader(InputStreamReader(client.getInputStream()));
                    val writer = PrintWriter(BufferedWriter(OutputStreamWriter(client.getOutputStream())), true)
                    while(true){
                        val citeste=reader.readLine()
                        val linie=citeste.toString()
                        val indexsfarsitcomanda=linie.indexOf("-")
                        val comanda = linie.substring(0,indexsfarsitcomanda)

                        if(comanda.compareTo("Save Score")==0 && linie!=null){
                            System.out.println(linie)
                            val indexsfarsitnume = linie.indexOf(",")
                            val username = linie.substring(indexsfarsitcomanda,indexsfarsitnume)
                            val score = linie.substring(indexsfarsitnume,linie.length)
                            databaseReference.child(username).setValue(username+","+score)
                        }

                        if(comanda.compareTo("Get Leaderboard")==0 && linie!=null){
                            databaseReference.addListenerForSingleValueEvent(object : ValueEventListener {
                                override fun onDataChange(dataSnapshot: DataSnapshot) {
                                    var data : String
                                    for (user in dataSnapshot.children) {
                                        System.out.println(client.toString());

                                        data = user.value as String
                                        System.out.println(data);
                                        writer.println(data);
                                    }
                                }
                                override fun onCancelled(databaseError: DatabaseError) {}
                            })
                        }
                    }
                }
            }
        }
        }
    }
}

Служба, которую я использую для взаимодействия с сервером из моего приложения:

package com.example.gameproject;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

import androidx.annotation.Nullable;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;

public class CommunicationService extends Service {


PrintWriter send;
BufferedReader get;
String message;
public void setSentObj(PrintWriter send){
    this.send = send;
}

public void setGetObj(BufferedReader get){
    this.get = get;
}
public final IBinder iBinder= new LocalBinder();

public class LocalBinder extends Binder {
    public CommunicationService getService() {

        return CommunicationService.this;
    }
}
public IBinder onBind(Intent intent) {

    return iBinder;
}


public void listen(){
    send("Get Leaderboard-");
    Thread listenToServerT = new Thread(new Listen());
    Log.e("listenFunc", "incep asculttttt");
    listenToServerT.start();
}


public void send(String mesaj){

    this.message = mesaj;
    Thread sendToServerT = new Thread(new Send());
    sendToServerT.start();
    Log.e("sendFunction", "S-a trimis");
}
public class Listen implements Runnable{

    @Override
    public void run() {
        String data;
        try {
            if ((data = get.readLine()) != null){
                System.out.println(data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public class Send implements Runnable{

    @Override
    public void run() {
        try{
            send.println(message);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...