【发布时间】:2020-10-26 23:43:30
【问题描述】:
我正在使用改造 2,尝试将数据发送到我的 laravel 网络。
InitRetrofit.java
public class InitRetrofit {
public static String API_URL = "http://192.168.1.2/sra-copy/public/";
public static Retrofit setInit(){
return new Retrofit.Builder().baseUrl(API_URL).addConverterFactory(GsonConverterFactory.create()).build();
}
public static ApiService getInstance(){
return setInit().create(ApiService.class);
}
}
ApiService.java
public interface ApiService {
@FormUrlEncoded
@POST("lapor/android")
Call<ResponseLapor> input(@Field("lat") String lat,
@Field("lng") String lng,
@Field("jenis") String jns,
@Field("keterangan") String ket);
}
响应类 ResponseLapor.java
public class ResponseLapor {
@SerializedName("message")
@Expose
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message){
this.message = message;
}
}
调用改造
public void lapor(){
lat = etLat.getText().toString();
lng = etLng.getText().toString();
keterangan = etKet.getText().toString();
jns = "Ringan";
ApiService api = InitRetrofit.getInstance();
retrofit2.Call<ResponseLapor> call = api.input(lat, lng, jns, keterangan);
call.enqueue(new Callback<ResponseLapor>() {
@Override
public void onResponse(retrofit2.Call<ResponseLapor> call, Response<ResponseLapor> response) {
String message = response.body().getMessage();
Toast.makeText(Lapor.this, message, Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(retrofit2.Call<ResponseLapor> call, Throwable t) {
Toast.makeText(Lapor.this, "Jaringan Error! "+t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
路线
Route::post('lapor/android', 'AndroidController@Lapor')->name('android.lapor');
控制器
public function Lapor(Request $request){
// dd($request->all());
$msg = array();
if($request->jenis == "Ringan"){
$rs = RumahSakit::select(DB::raw('*, ( 6367 * acos( cos( radians('.$request->lat.') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('.$request->lng.') ) + sin( radians('.$request->lat.') ) * sin( radians( lat ) ) ) ) AS distance'))->having('distance', '<', 25)->orderBy('distance')->get();
DB::table('status')->insert([
'nama_sts' => $rs->first()->nama_rs,
'keterangan' => $request->keterangan,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
]);
$msg["message"] = $rs->first()->nama_rs;
}
else{
$msg["message"] = "Error Jenis Laporan";
}
echo json_encode($msg);
}
控制器在尝试从网络插入时工作。 当我第一次发送数据时,它没有显示任何 toast,然后我第二次收到此错误:
"java.lang.NullPointerException: Attempt to invoke virtual method java.lang.String com.example.sra.response.ResponseLapor.getMessage()' on a null object reference
我认为错误与 URL 有关,因为我有另一个使用相同结构的 android 项目,并且它成功地将数据插入到 localhost(不是 laravel)只是原生 PHP。
【问题讨论】:
-
你如何将你的 laravel 变成一个 web 服务器? xampp、iis 还是 php artisan serve?
-
@Kelvin 尝试同时使用 localhost(在代码中带有 url)和来自 php artisan serve 的 ip,两者都没有工作
-
如果我使用127.0.0.1:8000 (php artisan serve),它说连接失败
-
如果您使用 php artisan serve,它将在本地使用端口 8000 提供服务,并且您需要在该本地 IP 地址上的端口 8000 上允许防火墙,以便其他 LAN 可以使用该端口。然后访问ip地址192.168.1.2:8000
-
还要确保在编译程序之前使用端口访问 ip,使用 cmd ping 192.168.1.2:8000 进行检查的简单方法
标签: java php android laravel retrofit2