首页 > 解决方案 > 在 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 "";
}

标签: androidretrofit2

解决方案


您有一个改造客户端的基本网址,因此定义您的界面如下,

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");

更多http://square.github.io/retrofit/


推荐阅读