一.所花时间
2h
二.代码量
50行
三.博客量
1篇
四.了解到的知识点
今天学习了android连接数据库的第二种方式:通过web中间层连接。
需要用到的工具是retrofit
首先需要引入retrofit的依赖:
在app目录下的bulid.gradle.kts的dependencies代码块中添加一句话
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
然后就是代码部分
package com.leap.homework2.util;
import android.util.Log;
import androidx.annotation.NonNull;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitUtil {
private static final String IP = "10.99.118.64";
private static final String URL ="http://"+IP+":8080" ;
public static Retrofit getRetrofit() {
//日志显示级别
HttpLoggingInterceptor.Level level= HttpLoggingInterceptor.Level.BODY;
//新建log拦截器
HttpLoggingInterceptor loggingInterceptor=new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(@NonNull String message) {
Log.d("RetrofitMessage","OkHttp====Message:"+message);
}
});
loggingInterceptor.setLevel(level);
//定制OkHttp
OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
//OkHttp进行添加拦截器loggingInterceptor
httpClientBuilder.addInterceptor(loggingInterceptor);
return new Retrofit.Builder()
.baseUrl(URL)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClientBuilder.build())
.build();
}
}
package com.leap.homework2.api;
import com.leap.homework2.util.Result;
import com.leap.homework2.entity.*;
import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
public interface TransitTracer {
@GET("/transitTracer/getAllLines")
Call<Result<List<Station>>> getAllLines();
@GET("/transitTracer/getAllStationOnLine")
Call<Result<List<Station>>> getAllStationOnLine(@Query("lineName") String lineName);
@GET("/transitTracer/getLine")
Call<Result<List<Line>>> getLine(@Query("stationName") String stationName);
@GET("/transitTracer/getShortestPath")
Call<Result<List<Station>>> getShortestPath(@Query("startStationName") String startStationName, @Query("endStationName") String endStationName);
}
TransitTracer transitTracer = RetrofitUtil.getRetrofit().create(TransitTracer.class);
transitTracer.getAllStationOnLine(lineName).enqueue(new Callback<Result<List<Station>>>() {
@Override
public void onResponse(@NonNull Call<Result<List<Station>>> call, @NonNull Response<Result<List<Station>>> response) {
assert response.body() != null; //断言语句,确保response.body() != null 条件为真。如果条件为假,则会抛出一个 AssertionError 异常.
stations = response.body().getData();
List<String> list = new ArrayList<>();
for(int i=0;i<stations.size();i++){
list.add(stations.get(i).toString());
}
ArrayAdapter<String> arrayAdapter= new ArrayAdapter<>(QueryLineActivity.this, android.R.layout.simple_list_item_1,list);
lv_QueryLine.setAdapter(arrayAdapter);
}
@Override
public void onFailure(@NonNull Call<Result<List<Station>>> call, @NonNull Throwable t) {
System.out.println("请求失败");
//返回错误信息
System.out.println(t.getMessage());
}
});
浙公网安备 33010602011771号