retrofit 相关问题

Retrofit是Square,Inc。的Android和Java类型安全的REST客户端。

如何使用 Retrofit 识别来自服务器的 JSON 响应数据是否为空?

我正在使用改造从服务器检索要显示到 android 中的 recyclerview 中的数据列表。 检索工作正常,显示调用的数据没有问题。 但是问题...

回答 4 投票 0

我想在带有java的android中使用Retrofit从Api获取数据并在Spinner上设置

这是我的 API 网址 @GET("/payment/fetch/board/{用户名}") 调用fetchBoardList(String 用户名); 这是我调用 url 的改造 Callcall=RetrofitClient.getInst...

回答 0 投票 0

如何在android实时项目中实现retrofit方法?

在实习期间,我研究了get和post等改造方法。现在正在做这个项目。 在小项目中,我可以轻松处理 API,但是在实时项目中,...

回答 0 投票 0

Android - 为什么我的客户端缓存网络调用?

这可能是一个奇怪的问题,但我有理由相信我的改造客户正在缓存我的电话。为什么我这么认为?我使用 CoinGecko 作为我的数据提供者。它有 10-30 个网络调用的限制...

回答 0 投票 0

如何使用 Retrofit2 发送带有图像的多部分?

我需要从下图中发送相同的数据(邮递员) 我正在使用 Retrofit with Coroutines,我尝试使用以下代码片段发送请求: @POST("ia") @多部分 怀疑...

回答 3 投票 0

我无法连接到改造帮助api

web api.php 网络 API.php <?php include "_config.php"; include "function.php"; define ('STATUS_OK', 0); // Provedeno define ('STATUS_UNKNOWN', 1); // Neznama chyba define ('STATUS_PARAM', 2); // Malo parametru define ('STATUS_UNAUTH', 3); // Chyba autorizace define ('STATUS_UNKNOWN_MODULE', 4); // Neznamy modul define ('STATUS_UNKNOWN_CMD', 5); // Neznamy prikaz define ('STATUS_NOEXIST', 6); // Polozka neexistuje define ('STATUS_EXIST', 7); // Polozka existuje define ('STATUS_WAIT', 8); // Zadanou operaci nelze nyni provezt, opakujte pozdeji define ('STATUS_DENY', 9); // Neni opravneni k uprave polozky define ('STATUS_NOHW', 10); // Pozadovany HW nebyl v systemu nalezen session_start(); $jsr = new StdClass(); $jsr->GACC_JAP_JSON_CONTENT = '4'; $jsr->Status = STATUS_OK; $jsr->Count = 0; $Pwd = $_POST['Pwd']; $Valid = 0; if (!$Config->Cloud){ $_SESSION['DbHost'] = $Config->DbHost; $_SESSION['DbPort'] = $Config->DbPort; $_SESSION['DbLogin'] = $Config->DbLogin; $_SESSION['DbPwd'] = $Config->DbPwd; $_SESSION['DbName'] = $Config->DbName; SQLConnect (); $Login = mysql_real_escape_string (StrDecode ($_POST['Login'])); } else { $SQLConn = mysql_connect ($Config->DbHost . ":" . $Config->DbPort, $Config->DbLogin, $Config->DbPwd); mysql_select_db ($Config->DbName); mysql_query("SET NAMES CP1250"); $CompLogin = mysql_real_escape_string ($_POST['CompLogin']); $res = Query ('SELECT Login, Pwd FROM Users WHERE (Login = "' . $CompLogin . '") AND (IsActive = "1") AND (State = "1") AND (ApiClient = "1") LIMIT 1'); if (mysql_num_rows ($res) > 0){ $row = mysql_fetch_array ($res); $_SESSION['DbLogin'] = $row['Login']; $_SESSION['DbPwd'] = $row['Pwd']; $_SESSION['DbName'] = $row['Login']; $_SESSION['DbHost'] = $Config->DbHost; $_SESSION['DbPort'] = $Config->DbPort; mysql_close ($SQLConn); SQLConnect (); } else { mysql_close ($SQLConn); $Valid = -1; } } if ($Valid == 0){ $res = Query ('SELECT Id FROM Person WHERE (Surname = "' . $Login . '") AND (Pwd = "' . $Pwd . '") AND (CanLogin = "1") AND (State = "1") AND (IsActive = "1")'); $row = mysql_fetch_row ($res); if ($row[0] !=''){ $Valid = $row[0]; } else { $Valid = LDAPLogin ($PLogin, $PPwd); } } if ($Valid > 0){ $res = Query ('SELECT Id, CantCat_Id, PersonCenter_Id, LDAPFlag, Name, Surname FROM Person WHERE Id = "' . $Valid . '"'); $row = mysql_fetch_array ($res); $_SESSION["Person_Id"] = $row['Id']; $_SESSION["PersonCenter_Id"] = $row['PersonCenter_Id']; $_SESSION["PersonName"] = $row['Name']; $_SESSION["PersonSurname"] = $row['Surname']; $_SESSION["PersonLDAP"] = $row['LDAPFlag']; $_SESSION["CantCat_Id"] = $row['CantCat_Id']; $_SESSION["AcsPresent"] = GetAcs (PER_PRESENT, $row['Id']); $_SESSION["AcsEvents"] = GetAcs (PER_EVENTS, $row['Id']); $_SESSION["AcsAttnEdit"] = GetAcs (PER_ATTNEDIT, $row['Id']); $res2 = Query ('SELECT Cant_Id, CantEx, UpdateDPH FROM CantCat WHERE Id = "' . $row['CantCat_Id'] . '" LIMIT 1'); $row2 = mysql_fetch_row ($res2); $_SESSION["UpdateDPH"] = $row2[2]; $_SESSION["Cant_Id"] = $row2[0]; $res3 = Query ("SELECT CantEx FROM License LIMIT 1"); $row3 = mysql_fetch_row ($res3); if (($row2[1] == "1") && ($row3[0] == "1")){ $_SESSION["CantEx"] = True; } else { $_SESSION["CantEx"] = False; } CreateAccessList (); LoadPermission ($row['Id'], true); GetDonate (); } function StrEncode ($Src){ return iconv ('windows-1250', 'utf-8', $Src); //return utf8_encode ($Src); } function StrDecode ($Src){ return iconv ('utf-8', 'windows-1250', $Src); //return utf8_decode ($Src); } if ($Valid > 0){ switch ($_POST['Mod']){ case 'Login': $Per = array (); $Cnt = 0; for ($i=0; $i<count ($_SESSION['Per']); $i++){ if ($_SESSION['Per'][$i]['Type'] > 0){ $Per[$Cnt] = new StdClass (); $Per[$Cnt]->Id = $_SESSION['Per'][$i]['Type']; $Cnt++; } } $jsr->Count = 1; $jsr->Person_Id = $row['Id']; $jsr->Person_Name = StrEncode ($row['Name']); $jsr->Person_Surname = StrEncode ($row['Surname']); $jsr->Person_CantCat_Id = $row['CantCat_Id']; $jsr->Permission = $Per; $row_Version = mysql_fetch_array (Query ('SELECT Version FROM Version LIMIT 1')); $jsr->DbVer = $row_Version['Version']; $res_Lic = Query ('SELECT * FROM License LIMIT 1'); $row_Lic = mysql_fetch_array ($res_Lic); $fc = mysql_num_fields ($res_Lic); $lic = new StdClass (); for ($i=1; $i<$fc; $i++){ $fn = mysql_field_name ($res_Lic, $i); $lic->$fn = StrEncode ($row_Lic[$fn]); } $jsr->License = $lic; $jsr->Status = STATUS_OK; break; case 'UserTree': include "./api/usertree.php"; break; case 'Events': include "./api/events.php"; break; case 'Term': include "./api/term.php"; break; case 'Door': include "./api/door.php"; break; case 'Present': include "./api/present.php"; break; case 'WorkList': include "./api/worklist.php"; break; case 'Cant': include "./api/cant.php"; break; case 'Prod': include "./api/prod.php"; break; default: $jsr->Status = STATUS_UNKNOWN_MODULE; } if (isset ($_POST['GetHwChanges'])){ $HwId = $_POST['GetHwChanges']; $Changes = new StdClass (); $Changes->Msg = 0; $Changes->Cfg = 0; $Changes->Erase = 0; $Changes->Person = 0; $res_CommCode = Query ('SELECT Id FROM CommCode WHERE (HwInstalled_Id = "' . intval ($HwId) . '") AND (ToDo <> "1") LIMIT 1'); if (mysql_num_rows ($res_CommCode) > 0) $Changes->Person = 1; $res_CommDo = Query ('SELECT DoMsg, DoCfg, DoErase FROM CommDo WHERE HwInstalled_Id = "' . intval ($HwId) . '" LIMIT 1'); if (mysql_num_rows ($res_CommDo) > 0){ $row_CommDo = mysql_fetch_array ($res_CommDo); $Changes->Msg = $row_CommDo['DoMsg']; $Changes->Cfg = $row_CommDo['DoCfg']; $Changes->Erase = $row_CommDo['DoErase']; } $jsr->Changes = $Changes; } } else { $jsr->Status = STATUS_UNAUTH; } echo json_encode ($jsr); $Now = new DateTime (); $fp = fopen ('api.log', "a"); fputs ($fp, $Now->format ('d.m.Y H:i:s') . chr (0x0D) . chr (0x0A)); fputs ($fp, 'Received: ' . print_r ($_POST, true)); fputs ($fp, 'Send: ' . print_r ($jsr, true)); fputs ($fp, chr (0x0D) . chr (0x0A) . chr (0x0D) . chr (0x0A)); fclose ($fp); ?> 我正在尝试使用 android 应用程序进行连接,这里是应用程序代码的改造 ApiService.java public interface ApiService { @POST("api.php") @FormUrlEncoded Call<ApiResponse> login(@Field("Mod")String mod, @Field("Login") String login, @Field("Pwd") String pwd); } ApiClient.java public class ApiClient { private static final String BASE_URL = "http://remote.8u.cz/"; private static Retrofit retrofit = null; public static Retrofit getClient() { if (retrofit == null) { HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); // Přidání kódu pro nastavení Gson na přísnější režim Gson gson = new GsonBuilder() .setLenient() .create(); // Vytvořte OkHttpClient s nastavením časového limitu a přidáním loggingInterceptor OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(loggingInterceptor) .connectTimeout(30, TimeUnit.SECONDS) // Nastavte časový limit pro připojení .readTimeout(30, TimeUnit.SECONDS) // Nastavte časový limit pro čtení dat .writeTimeout(30, TimeUnit.SECONDS) // Nastavte časový limit pro zápis dat .build(); retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .client(client) .build(); } return retrofit; } } ApiResponse.java public class ApiResponse { @SerializedName("GACC_JAP_JSON_CONTENT") private String gaccJapJsonContent; @SerializedName("Status") private int status; @SerializedName("Count") private int count; private String response; // Gettery a settery pro všechny proměnné public String getGaccJapJsonContent() { return gaccJapJsonContent; } public void setGaccJapJsonContent(String gaccJapJsonContent) { this.gaccJapJsonContent = gaccJapJsonContent; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public String getResponse() { return response; } public void setResponse(String response) { this.response = response; } } MainActivity.java public class MainActivity extends AppCompatActivity { ApiResponse apiResponse; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ApiService apiService = ApiClient.getClient().create(ApiService.class); Call<ApiResponse> call = apiService.login("Login","5168", "5168"); call.enqueue(new Callback<ApiResponse>() { @Override public void onResponse(Call<ApiResponse> call, Response<ApiResponse> response) { if (response.isSuccessful()) { apiResponse = response.body(); // Log.d("API_RESPONSE", apiResponse.toString()); int status = apiResponse.getStatus(); int count = apiResponse.getCount(); String gh = apiResponse.getGaccJapJsonContent(); Log.i("API_RESPONSE", "onResponse: " + status + "count " + count + " gh "+ gh); // Zpracujte odpověď z API } else { Log.i("API_RESPONSE", "onResponse error: " + response.errorBody()); // Chyba v komunikaci s API } } @Override public void onFailure(Call<ApiResponse> call, Throwable t) { // Chyba při komunikaci s API t.printStackTrace(); Log.e("API_RESPONSE", "onFailure: ", t); } }); } } 我的输出仍然是一样的,我不再看到错误为什么不应该登录 {“GACC_JAP_JSON_CONTENT”:“4”,“状态”:3,“计数”:0}

回答 0 投票 0

应用程序关闭后如何等待“refiting2”的结果?

逻辑是这样的:用户编写文本,当按下按钮时,使用“retrofit2”将文本发送到服务器,并从服务器以文本形式返回结果。 但是那里...

回答 0 投票 0

使用 POST 命令时改进到 unicode 的转换

我目前正在使用数据类来构建改造 POST api 调用的请求主体。 主体本质上包含字符串。但是,我在发送字符串时注意到一个问题。改造是

回答 0 投票 0

如何在 Fragment 中处理 Retrofit 中的超时

我想在发生超时时显示一条错误消息,但如果不传递 loginProgressBar 和 loginTimeoutErrorTextview 或其他 UI 相关变量,我找不到如何去做。基本上保持...

回答 2 投票 0

How to use a IPv6 link-local address with Retrofit as baseUrl

我正在使用 NsdManager 来解析本地网络(物联网设备)上的服务。 resolveService 返回一个带有主机和端口的 NsdServiceInfo。主机是一个带有链接的 Inet6Address 对象......

回答 1 投票 0

如何在 Fragment 中处理 Retrofit 中的超时

我想在发生超时时显示一条错误消息,但如果不传递 loginProgressBar 和 loginTimeoutErrorTextview 或其他 UI 相关变量,我找不到如何去做。基本上保持...

回答 2 投票 0

如何在 Kotlin 中使用 Retrofit2 获取响应 url?

一些背景,我正在尝试做Spotify的授权代码流程。现在我一直在请求用户授权。问题是响应主体在 url 中作为查询参数

回答 1 投票 0

Retrofit android 预期为 BEGIN_ARRAY 但在第 1 行第 2 列路径 $

我是 Retrofit 的新手,我遇到了一个奇怪的问题。我收到以下错误 --> 应为 BEGIN_ARRAY 但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT 然而,当我到达终点时......

回答 1 投票 0

Android/Retrofit:当服务器在到期时不会返回 401 错误时,每三十分钟刷新令牌的最佳方式?

如果令牌过期,我的应用程序的 API 不会返回 401 错误。相反,当前的要求是每三十分钟自动刷新一次令牌。这样做的最佳方法是什么?

回答 1 投票 0

如何在 Android 中将令牌发送到标头 Retrofit

在我的应用程序中,我有登录页面,在此页面中,我将 user_token 存储在 DataStore 中,我希望在其他页面中将此令牌传递给其他 API 并加载数据。 我写下面的代码并告诉我

回答 0 投票 0

如何在没有 & 的情况下在改造 Android url 中附加动态值

我想在决赛中拥有: https://api.ocs.fr/apps/v2/contents?search=title=value 价值动态在哪里 我的代码: @GET("内容?搜索=") 暂停有趣的getProgrammes( @Query("标题&曲...

回答 0 投票 0

在 recyclerView 中获取 api 数据时出错,错误显示为:E/RecyclerView: No adapter attached;跳过布局

应用程序从api获取电影数据并获取到片段的recyclerView。所以问题是我没有在 recyclerView 中获取数据。我看了一些 youtube 教程,但无法获得...

回答 0 投票 0

Kotlin,带有改造的图像上传需要很长时间

我正在尝试将图像从 android 应用程序上传到 laravel 服务器。 我正在使用下面链接中的@waqas7 方法 https://github.com/waqas7/UploadImageOnServer 问题是,文件太大,拿去...

回答 1 投票 0

使用喷气背包组合的空活动:跳过 37 帧!应用程序可能在其主线程上做了太多工作

我总是收到这条消息: 跳过 37 帧!应用程序可能在其上做了太多工作 主线程。 即使当我使用空的撰写活动启动新应用程序时也是如此。 有没有...

回答 0 投票 0

OkHttp3 拦截器向请求正文添加字段

由于我的 API 请求都包含一些共同的 json 字段,我想将这些字段添加到拦截器中,但我正在努力修改拦截器中的 OkHttp3 RequestBody 她...

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.