我有一个有 3 个活动的 android 应用程序:
- 登录活动
- 显示与用户有关的所有任务的任务活动(使用阵列适配器填充)
- 单击列表中的任务产生的 task_details 活动
我必须使用 REST Apis。到目前为止,我所做的研究指导我使用 Retrofit。我检查了如何使用它并发现:
- 在主活动中设置基本 URL(我的是登录活动)
- 我需要创建一个 API 类并使用注释定义我的函数。
- 在 Activity 中使用类 Rest Adapter 并定义回调。
如果我的应用程序是一个单一的活动应用程序,我会处理我的 MainActivity.java 中的所有内容,但我不知道如何以及在哪里放置步骤 1、2、3 中的所有代码以用于我的 3 个活动。你能不能通过告诉我如何在我的应用程序中使用 Retrofit 来提供帮助。非常感谢。
具体来说,我需要网络调用: 1. 登录用户 2. 获取用户的所有任务。对于两者,我都会使用给定的 REST api。
*********************************************
Calling Api USing Retrofit
*********************************************
**Dependancies** :-
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.squareup.picasso:picasso:2.5.2'
implementation 'com.android.support:cardview-v7:27.1.1'
enter code here
**Model**
use the Pozo class
**Api Call**
-> getLogin() // use the method
//API call for Login
private void getLogin()
{
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
AsyncHttpClient client = new AsyncHttpClient();
RequestParams requestParams = new RequestParams();
requestParams.put("email_id", edit_email.getText().toString());
requestParams.put("password", edit_password.getText().toString());
Log.e("", "LOGIN URL==>" + Urls.LOGIN + requestParams);
Log.d("device_token", "Device_ Token" + FirebaseInstanceId.getInstance().getToken());
client.post(Urls.LOGIN, requestParams, new JsonHttpResponseHandler() {
@Override
public void onStart() {
super.onStart();
ShowProgress();
}
@Override
public void onFinish() {
super.onFinish();
Hideprogress();
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
super.onSuccess(statusCode, headers, response);
Log.e("", "Login RESPONSE-" + response);
Login login = new Gson().fromJson(String.valueOf(response), Login.class);
edit_email.setText("");
edit_password.setText("");
if (login.getStatus().equals("true")) {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
MDToast mdToast = MDToast.makeText(SignInActivity.this, String.valueOf("User Login Successfully!"),
MDToast.LENGTH_SHORT, MDToast.TYPE_SUCCESS);
mdToast.show();
Utils.WriteSharePrefrence(SignInActivity.this, Util_Main.Constant.EMAIL, login.getData().getEmailId());
Utils.WriteSharePrefrence(SignInActivity.this, Constant.USERID, login.getData().getId());
Utils.WriteSharePrefrence(SignInActivity.this, Constant.USERNAME, login.getData().getFirstName());
Utils.WriteSharePrefrence(SignInActivity.this, Constant.PROFILE, login.getData().getProfileImage());
hideKeyboard(SignInActivity.this);
Intent intent = new Intent(SignInActivity.this, DashboardActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
MDToast mdToast = MDToast.makeText(SignInActivity.this, String.valueOf("Login Denied"),
MDToast.LENGTH_SHORT, MDToast.TYPE_ERROR);
mdToast.show();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
super.onFailure(statusCode, headers, responseString, throwable);
Log.e("", throwable.getMessage());
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
MDToast mdToast = MDToast.makeText(SignInActivity.this, "Something went wrong",
MDToast.LENGTH_SHORT, MDToast.TYPE_ERROR);
mdToast.show();
}
});
}
原文由 Stack Man 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 Retrofit 非常简单明了。
首先,您需要为您的项目添加改造,例如 Gradle 构建系统。
另一种方法是您可以下载 .jar 并将其放入您的 libs 文件夹中。
然后,您需要定义接口,Retrofit 将使用这些接口对您的 REST 端点进行 API 调用。例如对于用户:
好的。现在您已经定义了 API 接口,您可以尝试使用它了。
首先,您需要创建一个 RestAdapter 实例并设置 API 后端的基本 url。这也很简单:
在这里,Retrofit 将从界面读取您的信息,并在后台根据您提供的元信息创建 RestHandler ,它实际上将执行 HTTP 请求。
然后在幕后,一旦收到响应,在 json api 的情况下,您的数据将使用 Gson 库转换为您的模型,因此您应该意识到 Gson 中存在的限制实际上存在于 Retrofit 中。
要扩展/覆盖序列化器/反序列化您的响应数据到您的模型的过程,您可能需要提供自定义序列化器/反序列化器以进行改造。
这里需要实现 Converter 接口,实现 fromBody() 和 toBody() 两个方法。
这是例子:
现在你需要启用你的自定义适配器,如果在构建 RestAdapter 时需要使用 setConverter()
好的。现在您知道了如何将数据从服务器获取到您的 Android 应用程序。但是您需要以某种方式管理您的数据并在正确的位置调用 REST 调用。在那里,我建议使用 android Service 或 AsyncTask 或 loader 或 rx.java 来查询后台线程上的数据,以免阻塞您的 UI。
所以现在你可以找到最合适的地方打电话
获取您的远程数据。