![](/img/trans.png)
[英]socket connection refused: telnet: Unable to connect to remote host: Connection refused
[英]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.