Не удалось подключиться к локальному хосту - PullRequest
0 голосов
/ 07 января 2019

Я новичок в разработке приложений для Android. Я делаю демо-приложение для Android в Android-студии (Котлин). Мое приложение в основном является серверным приложением. Я использую модификацию в качестве библиотеки и node.js в качестве серверной разработки, и я не использую какую-либо базу данных, вместо базы данных, я использую JSON (конвертер для модификации gson). Итак, есть обзор переработчика, в котором я хочу получить данные, но когда я запускаю свое приложение на своем телефоне Android. Он показывает исключение тайм-аута сокета java.net, не удается подключиться. Во-первых, я изменил свой порт 127.0.0.1:9000 на порт 10.0.2.2:9000, но ничего не произошло. Это показывает то же самое. И я использую Windows PC. Я предоставлю мой файл .js и мой передний код. Заранее спасибо.

//my node.js codes

var express = require('express');
var app = express();
var fs = require("fs");

var bodyParser = require('body-parser')
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({
    extended: true
}));

//Arbitrary ID manager since we don't use a database
var index = 5;

// Initializing Destinations Array.. It will behave like a dummy database 
var destinations = [{
    "id": 1,
    "city": "Mumbai",
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce accumsan quis justo quis hendrerit. Curabitur a ante neque. Fusce nec mauris sodales, auctor sem at, luctus eros. Praesent aliquam nibh neque. Duis ut suscipit justo, id consectetur orci. Curabitur ultricies nunc eu enim dignissim, sed laoreet odio blandit.",
    "country" : "India"
}, {
    "id": 2,
    "city": "Melbourne",
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce accumsan quis justo quis hendrerit. Curabitur a ante neque. Fusce nec mauris sodales, auctor sem at, luctus eros. Praesent aliquam nibh neque. Duis ut suscipit justo, id consectetur orci. Curabitur ultricies nunc eu enim dignissim, sed laoreet odio blandit.",
    "country" : "Australia"
}, {
    "id": 3,
    "city": "Washington DC",
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce accumsan quis justo quis hendrerit. Curabitur a ante neque. Fusce nec mauris sodales, auctor sem at, luctus eros. Praesent aliquam nibh neque. Duis ut suscipit justo, id consectetur orci. Curabitur ultricies nunc eu enim dignissim, sed laoreet odio blandit.",
    "country" : "USA"
}, {
    "id": 4,
    "city": "New Delhi",
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce accumsan quis justo quis hendrerit. Curabitur a ante neque. Fusce nec mauris sodales, auctor sem at, luctus eros. Praesent aliquam nibh neque. Duis ut suscipit justo, id consectetur orci. Curabitur ultricies nunc eu enim dignissim, sed laoreet odio blandit.",
    "country" : "India"
}, {
    "id": 5,
    "city": "Tokyo",
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce accumsan quis justo quis hendrerit. Curabitur a ante neque. Fusce nec mauris sodales, auctor sem at, luctus eros. Praesent aliquam nibh neque. Duis ut suscipit justo, id consectetur orci. Curabitur ultricies nunc eu enim dignissim, sed laoreet odio blandit.",
    "country" : "Japan"
}]

// A promo message to user 
var message = "Black Friday! Get 50% cachback on saving your first spot.";

app.get('/messages', function (req, res) {
    res.end(JSON.stringify(message));
})

// Get the list of destinations, convert it to JSON and send it back to client 
app.get('/destination', function (req, res) {
    var count = req.query.count != undefined ? req.query.count : req.query.count = 100;
    if(req.query.country){
        var countrySpots = destinations.filter(function(destination) {
            return destination.country == req.query.country
        });
        res.end(JSON.stringify(countrySpots.slice(0, count)));
    }
    
    res.end(JSON.stringify(destinations.slice(0, count)));
})

// Get one particular Destination using ID 
app.get('/destination/:id', function (req, res) {
    for (var i = 0; i < destinations.length; i++) {
        if(destinations[i].id == req.params.id){
            res.end(JSON.stringify(destinations[i]));
        }
    }
})

// Create a new Destination and add it to existing Destinations list 
app.post('/destination', function (req, res) {
    var newDestination = {
        "city": req.body.city,
        "description": req.body.description,
        "country" : req.body.country,
        "id": index + 1
    }

    index++;

    destinations.push(newDestination);
    res.status(201).end(JSON.stringify(newDestination));
})

// Update a Destination 
app.put('/destination/:id', function (req, res) {
    var destination;
    for (var i = 0; i < destinations.length; i++) {
        if(destinations[i].id == req.params.id){
            destinations[i].city = req.body.city;
            destinations[i].country = req.body.country;
            destinations[i].description = req.body.description;
            destination = destinations[i];
        }
    }

    res.end(JSON.stringify(destination));
})

// Delete a Destination 
app.delete('/destination/:id', function (req, res) {
    for (var i = 0; i < destinations.length; i++) {
        if(destinations[i].id == req.params.id){
            destinations.splice(i, 1);
            res.status(204).end(JSON.stringify(destinations[i]));
        }
    }
});

// Home Page 
app.get('/', (req, res) => res.send('Welcome! You are all set to go!'))

// Configure server 
var server = app.listen(9000, '127.0.0.1', function (req, res) {

    var host = server.address().address
    var port = server.address().port

    console.log(`Server running at http://${host}:${port}/`);
})

DestinationListActivity

class DestinationListActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_destiny_list)

    setSupportActionBar(toolbar)
    toolbar.title = title

    fab.setOnClickListener {
        val intent = Intent(this@DestinationListActivity, DestinationCreateActivity::class.java)
        startActivity(intent)
    }
}

override fun onResume() {
    super.onResume()

    loadDestinations()
}

private fun loadDestinations() {

    // To be replaced by retrofit code
    //  destiny_recycler_view.adapter = DestinationAdapter(SampleData.DESTINATIONS)

    val destination = ServiceBuilder.buildService(DestinationService::class.java)

    val requestCall = destination.getDestinationList()

    requestCall.enqueue(object : Callback<List<Destination>> {
        override fun onFailure(call: Call<List<Destination>>, t: Throwable) {
            Toast.makeText(this@DestinationListActivity , "Error Occures" + t.toString(), Toast.LENGTH_LONG).show()
        }

        override fun onResponse(call: Call<List<Destination>>, response: Response<List<Destination>>) {
            if(response.isSuccessful) {
                val destinationList = response.body()!!
                destiny_recycler_view.adapter = DestinationAdapter(destinationList)
            } else if(response.code() == 401) {
                Toast.makeText(this@DestinationListActivity, "Your session is over plz login again", Toast.LENGTH_LONG).show()
            }
            else {
                Toast.makeText(this@DestinationListActivity, "Failed to receive items", Toast.LENGTH_LONG).show()
            }
        }
    })
}

}

// Класс ServiceBuilder

object ServiceBuilder {

// Before release, change this URL to your live server URL such as "https://smartherd.com/"
private const val URL = "http://47.247.190.247:9000/"

// Create OkHttp Client
private val okHttp = OkHttpClient.Builder()
                                  .connectTimeout(100, TimeUnit.SECONDS)
                                  .readTimeout(100,TimeUnit.SECONDS)

// Create Retrofit Builder
private val builder = Retrofit.Builder().baseUrl(URL)
    .addConverterFactory(GsonConverterFactory.create())
    .client(okHttp.build())

// Create Retrofit Instance
private val retrofit = builder.build()

fun <T> buildService(serviceType: Class<T>): T {
    return retrofit.create(serviceType)
}

}

// Интерфейсный класс

interface DestinationService {

@GET("destination")
fun getDestinationList(): Call<List<Destination>>

} * * тысяча двадцать-один

Это фотография моего телефона Android

1 Ответ

0 голосов
/ 30 апреля 2019

Я нашел ответ. Мой локальный хост не связан с моим телефоном Android, поэтому он показывает ошибку порта. Итак, чтобы подключить мой телефон Android к localhost. Я на самом деле публичный мой localhost, используя "ngrok". Затем мои данные загружаются на мой телефон Android. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...