繁体   English   中英

Okhttp 无法连接到 localhost 端点抛出连接失败:ECONNREFUSED(连接被拒绝)

[英]Okhttp Unable to connect to a localhost endpoint throws Connected failed: ECONNREFUSED (Connection refused)

我正在尝试使用 okhttp 和 flask 将我的本地后端和前端连接在一起,但是我收到 java.net.ConnectException: failed to connect to /127.0.0.1 (port 5000) after 10000ms: isConnected failed: ECONNREFUSED (Connection denied)例外

现在 API 可以正常工作,因为我可以在 postman 中找到它返回值,这里是代码

from flask import request, Flask
import getMovie
import getUser

api = Flask(__name__)

#Movie Endpoints

@api.route('/Movies/GetMovieById', methods=['GET'])
def get_movie_by_id():
    id = str(request.args['id'])
    return getMovie.getById(id)


@api.route('/Movies/All', methods=['GET'])
def get_all_movies():
    return getMovie.getAll()

#User Endpoints

@api.route('/Users/All', methods=['GET'])
def get_all_users():
    return getUser.getAll()

@api.route('/Users/GetUserById', methods=['GET'])
def get_user_by_id():
    id = str(request.args['id'])
    return getUser.getById(id)


if __name__ == '__main__':
    api.run()

然后这里是 android 应用程序的主要活动

package com.example.moviebuffs

import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.moviebuffs.ui.main.*
import kotlinx.android.synthetic.main.main_activity.*
import okhttp3.*
import java.io.IOException


class MainActivity : AppCompatActivity() {

    private lateinit var movieListAdapter: MovieListAdapter

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

        movieListAdapter= MovieListAdapter(mutableListOf())

        rvFilmList.adapter = movieListAdapter
        rvFilmList.layoutManager = LinearLayoutManager(this)


        var testMovie = Movie(1,"Jurassic Park","Action | Dinosaurs")

        for (i in 1..100) {
            movieListAdapter.addMovie(testMovie)
        }

        fetchTest()

    }

    fun fetchTest() {
        print("Trying to connect....")

        val url: HttpUrl = HttpUrl.Builder()
            .scheme("http")
            .host("127.0.0.1")
            .port(5000)
            .addPathSegment("Movies")
            .addPathSegment("All")
            .build()


        val request = Request.Builder().url(url).build()

        val client = OkHttpClient()
        client.newCall(request).enqueue(object: Callback {
            override fun onResponse(call: Call, response: Response) {
                val body = response?.body?.string()
                print(body)
            }

            override fun onFailure(call: Call, e: IOException) {
               val x = 0
            }
        })
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        // Inflate the menu; this adds items to the action bar if it is present.
        menuInflater.inflate(R.menu.main_menu, menu)
        return true
    }

    fun toGenreActivity(item: MenuItem?): Boolean {
        val intent = Intent(this, GenreActivity::class.java)
        startActivity(intent)
        return true
    }

    fun toUserActivity(item: MenuItem?): Boolean {
        val intent = Intent(this, UserActivity::class.java)
        startActivity(intent)
        return true
    }

    fun toMovieActivity(v: View?) {
        val intent = Intent(this, MovieActivity::class.java)
        startActivity(intent)
    }
}

这是清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.moviebuffs">

    <uses-permission android:name="android.permission.INTERNET"/>

    <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>

        <activity android:name=".ui.main.GenreActivity">

        </activity>

        <activity android:name=".ui.main.MovieActivity">

        </activity>

        <activity android:name=".ui.main.UserActivity">

        </activity>
    </application>

</manifest>

有任何想法吗?

本地主机环回地址 127.0.0.1 是指设备本身。 您没有在 Android 仿真器上运行服务器。

请改用 10.0.2.2 连接到运行模拟器的主机。

更多信息: https://developer.android.com/studio/run/emulator-networking

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM