Android使用Retrofit_00_Getting Started
程序员文章站
2024-03-01 08:09:04
...
原教程视频在这里。
原教程源码在这里。
添加Android项目的dependence(注:其他dependence并未列出)
dependencies {
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
}
修改dependencies之后,项目Gradle需要sync一下。
修改Manifest文件,增加一个网络权限。
<uses-permission android:name="android.permission.INTERNET" />
利用GitHub来进行示例。
创建一个GitHubRepo类,用于表示一个repo。
package com.huyaoyu.retrofitgetstarted;
/**
* Created by yaoyu on 3/2/18.
*/
public class GitHubRepo {
private String name;
public String getName() {
return name;
}
}
创建一个GitHubClient Interface,返回一个Call object。
package com.huyaoyu.retrofitgetstarted;
import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
/**
* Created by yaoyu on 3/2/18.
*/
public interface GitHubClient {
@GET("/users/{user}/repos")
Call<List<GitHubRepo>> reposForUser(@Path("user") String user);
}
创建一个GitHubRepoAdapter类,用于生成ListView的各个row。
package com.huyaoyu.retrofitgetstarted;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.List;
/**
* Created by yaoyu on 3/2/18.
*/
public class GitHubRepoAdapter extends ArrayAdapter<GitHubRepo> {
private Context context;
private List<GitHubRepo> values;
public GitHubRepoAdapter(Context context, List<GitHubRepo> values) {
super(context, R.layout.list_item_pagination, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if ( row == null ) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_item_pagination, parent, false);
}
TextView textView = (TextView) row.findViewById(R.id.list_item_pagination_text);
GitHubRepo item = values.get(position);
String message = item.getName();
textView.setText(message);
return row;
}
}
修改MainActivity类,分别创建Retrofit对象,GitHubClient对象和Call对象。利用Call对象获得response,从response中利用GitHubRepoAdapter提取出需要的信息填充ListView。
package com.huyaoyu.retrofitgetstarted;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.Toast;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.pagination_list);
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
GitHubClient client = retrofit.create(GitHubClient.class);
Call<List<GitHubRepo>> call = client.reposForUser("huyaoyu");
call.enqueue(new Callback<List<GitHubRepo>>() {
@Override
public void onResponse(Call<List<GitHubRepo>> call, Response<List<GitHubRepo>> response) {
List<GitHubRepo> repos = response.body();
listView.setAdapter(new GitHubRepoAdapter(MainActivity.this, repos));
}
@Override
public void onFailure(Call<List<GitHubRepo>> call, Throwable t) {
Toast.makeText(MainActivity.this, "error", Toast.LENGTH_SHORT).show();
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.huyaoyu.retrofitgetstarted.MainActivity">
<ListView
android:id="@+id/pagination_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"></ListView>
</android.support.constraint.ConstraintLayout>
list_item_pagination.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/list_item_pagination_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@+id/label"
android:textSize="20sp"/>
</LinearLayout>
执行效果如下图。
上一篇: 与MSSQL对比学习MYSQL的心得(一)--基本语法
下一篇: 浅析Spring4新特性概述
推荐阅读
-
Android使用Retrofit_00_Getting Started
-
解析Android声明和使用权限
-
Android App中使用ListFragment的实例教程
-
Android Volley框架使用源码分享
-
Android中Fragmen首选项使用自定义的ListPreference的方法
-
Android应用中使用Fragment组件的一些问题及解决方案总结
-
Android自定义弹出窗口PopupWindow使用技巧
-
Android App中使用LinearLayout进行居中布局的实例讲解
-
Android应用中使用SharedPreferences类存储数据的方法
-
Android Studio应用开发集成百度语音合成使用方法实例讲解