android - 在 Retrofit 中通过 URL 传递数据
问题描述
我想在我的 recyclerview 中显示来自 json 数据的数据,但是我得到空指针异常,我不知道我在哪里做错了。
这是我的 json 数据:
{“值”:1,“review_profile_results”:[{“review_id”:“1”,“review_name”:“样本”,“review_user_id”:“2”,“review_comments”:“+信誉,受信任”,“review_rate “:“4”,“review_rate_def”:“受信任”,“review_date”:“2018-07-22 06:17:31”}]}
这是API接口:
@GET (UrlFinal.pathServiceUrl+"show_profile_reviews.php")
Call <Value> show_profileReviews (@Query("id")String id);
我想传递的可能的 URL 结果
/show_profile_reviews.php?id=c4ca4238a0b923820dcc509a6f75849b
这是我传递数据的方式
private void showProfileReviews(){
String userId = MainActivity.user.getId();
String id_md5 = md5(userId);
Toast.makeText(getActivity(), id_md5, Toast.LENGTH_SHORT).show();
Retrofit retrofit = new Retrofit.Builder ()
.baseUrl (UrlFinal.ipUrl)
.addConverterFactory (GsonConverterFactory.create ())
.build ();
ServiceAPI api = retrofit.create (ServiceAPI.class);
Call<Value> call = api.show_profileReviews(id_md5);
call.enqueue(new Callback<Value>() {
@Override
public void onResponse(@NonNull Call<Value> call, @NonNull Response<Value> response) {
if (Objects.requireNonNull(response.body()).getValue() == 1) {
profile_list = Objects.requireNonNull(response.body()).getReviewProfileResults();
adapter = new Adapter_ProfileReviews(getActivity(), profile_list);
recyclerView.setAdapter(adapter);
Log.d("Result", profile_list.toString());
Log.d("Result", call.toString());
}
}
@Override
public void onFailure(@NonNull Call<Value> call, @NonNull Throwable t) {
Log.d("Result", t.getMessage());
}
});
}
public String md5(String s) {
try {
// Create MD5 Hash
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuilder hexString = new StringBuilder();
for (byte aMessageDigest : messageDigest)
hexString.append(Integer.toHexString(0xFF & aMessageDigest));
return hexString.toString();
}catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
解决方案
您有一个改造客户端的基本网址,因此定义您的界面如下,
public interface YourApiInterface {
@GET ("/show_profile_reviews")
Call <Value> show_profileReviews (@Query("id")String id);
}
改造电话将是BASE_URL/show_profile_reviews?id=your_id
如果您想使用动态 URL,请按如下方式定义您的界面,
public interface YourApiInterface {
@GET
Call <Value> show_profileReviews (@Url String url);
}
如果您使用动态网址,那么您可以将网址传递为,
apiInterface.show_profileReviews("https://base_url/show_profile_reviews.php?id=c4ca4238a0b923820dcc509a6f75849b");
推荐阅读
- scala - Scala 无法在单个 Json 行中获取数据
- python - 使用 python-docx 迭代数据框中的值以打印到 Word
- gitlab-ci - 带有`when:manual`的gitlab规则总是被触发
- regex - 正则表达式将扩展名附加到文件路径
- reactjs - 从基于类的组件转换为功能组件
- php - 将 GET 响应与变量进行比较
- regex - Notepad++ 行间复制一个字符
- python - Checkable [QGroupBox] reverse False/True to Block/Unblock the content items
- c# - 我可以在 Android 中只有一个没有全屏的 Xamarin 内容页面吗?
- android-permissions - Android 11: avc: denied { read } for name="sdcard"