如何在Android应用中使用Retrofit与Laravel网页进行数据交互?
使用Retrofit从Laravel后端获取数据的完整步骤
Laravel端:搭建API接口
首先需要在Laravel中提供可被Retrofit调用的REST API,以下是一个简单的示例:
在routes/api.php中添加路由:
// 公开的示例数据接口 Route::get('/sample-data', function () { // 实际开发中可替换为数据库查询逻辑 return response()->json([ 'status' => 'success', 'data' => [ ['id' => 1, 'title' => 'Laravel测试数据1', 'content' => '第一条测试内容'], ['id' => 2, 'title' => 'Laravel测试数据2', 'content' => '第二条测试内容'] ] ]); });
测试接口:访问http://你的Laravel域名/api/sample-data,确认能返回正确的JSON响应。如果需要接口认证,可以使用Laravel Sanctum或Passport实现,这里先以无认证接口为例。
Android端:配置Retrofit并发起请求
1. 添加依赖
在app/build.gradle的dependencies块中添加Retrofit及Gson转换器依赖:
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
同步Gradle完成依赖下载。
2. 添加网络权限
在AndroidManifest.xml中添加网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />
3. 定义数据模型类
根据Laravel返回的JSON结构,创建对应的数据类(以Java为例,Kotlin可使用更简洁的数据类):
public class SampleData { private String status; private List<DataItem> data; // Getter & Setter public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public List<DataItem> getData() { return data; } public void setData(List<DataItem> data) { this.data = data; } public static class DataItem { private int id; private String title; private String content; // Getter & Setter public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } } }
4. 定义Retrofit接口
创建接口描述API请求规则:
import retrofit2.Call; import retrofit2.http.GET; public interface ApiService { // 对应Laravel的/api/sample-data路由 @GET("sample-data") Call<SampleData> getSampleData(); }
5. 初始化Retrofit并发起请求
在Activity或ViewModel中完成Retrofit初始化,并发起异步请求(避免阻塞主线程):
import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import android.util.Log; // 初始化Retrofit实例 Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://你的Laravel域名/api/") // 注意末尾斜杠 .addConverterFactory(GsonConverterFactory.create()) .build(); // 创建API服务实例 ApiService apiService = retrofit.create(ApiService.class); // 发起异步请求 Call<SampleData> call = apiService.getSampleData(); call.enqueue(new Callback<SampleData>() { @Override public void onResponse(Call<SampleData> call, Response<SampleData> response) { if (response.isSuccessful() && response.body() != null) { SampleData result = response.body(); if ("success".equals(result.getStatus())) { // 处理返回的数据,比如更新UI for (SampleData.DataItem item : result.getData()) { Log.d("Retrofit", "标题:" + item.getTitle() + " 内容:" + item.getContent()); } } } else { Log.e("Retrofit", "响应失败:" + response.message()); } } @Override public void onFailure(Call<SampleData> call, Throwable t) { Log.e("Retrofit", "请求失败:" + t.getMessage()); } });
关键注意事项
- 本地开发时,Laravel的baseUrl不要用
localhost,需使用电脑的局域网IP(如http://192.168.1.100/api/),确保Android设备能访问。 - 生产环境建议使用HTTPS,只需将baseUrl改为
https开头即可。 - 若接口需要认证,可在Retrofit请求中添加Header:
@GET("sample-data") Call<SampleData> getSampleData(@Header("Authorization") String token); // 调用时传入 "Bearer 你的认证Token"
内容的提问来源于stack exchange,提问作者lewis04
相关产品推荐
相关产品推荐

