如何通过对 Android 进行改造来解析 json
How to parse json with retrofit on Android
我尝试编写解析缩写解码及其使用频率的应用程序。用户输入缩写,例如“kg”。因此,应用程序应连接到“http://nactem.ac.uk/software/acromine/dictionary.py?sf=kg”并解析它。
模型 classes 应该是什么样的?我是否在界面中正确描述了@Geth?怎么获取列表,我做了一个adapter,绑定到列表上,但是getResponse()我不太清楚
接口:
public interface SService {
@GET("dictionary.py?")
Call<Example> getResponse(@Query("sf=") String searchString);
}
改装客户端:
public class RetrofitClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(String baseUrl) {
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
并添加class ApiUtils
public class ApiUtils {
public static final String BASE_URL = "http://nactem.ac.uk/software/acromine/";
public static SService getSOService() {
return RetrofitClient.getClient(BASE_URL).create(SService.class);
}
}
主要活动
public class MainActivity extends AppCompatActivity {
private ArrayList<Lf> elements = new ArrayList();
EditText editText1;
ElementAdapter stateAdapter;
ListView list;
private SService mService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText1 = (EditText) findViewById(R.id.edit_text);
mService = ApiUtils.getSOService();
list = (ListView) findViewById(R.id.fragment_list);
stateAdapter = new ElementAdapter(this, R.layout.list_item, elements);
list.setAdapter(stateAdapter);
}
public void loadAnswers() {
mService.getResponse(editText1.getText().toString()).enqueue(new Callback<Example>() {
@Override
public void onResponse(Call<Example> call, Response<Example> response) {
if(response.isSuccessful()) {
stateAdapter.updateAnswers(response.body().getLfs());
} else {
int statusCode = response.code();
// handle request errors depending on status code
}
}
@Override
public void onFailure(Call<Example> call, Throwable t) {
}
});
}
public void activity_button(View view) {
//stateAdapter.clear();
loadAnswers();
}
}
更新!!
所有输入数据都是一个数组:Array[Object{...}]。解析它的正确接口:
public 接口 SService {
@GET("dictionary.py")
Call<List<Example>> getResponse(@Query("sf") String searchString);
}
因此,我们得到带有示例对象的调用列表(在这种情况下只有一个对象)。
把SService
界面改成下面这样,
public interface SService {
@GET("dictionary.py")
Call<Example> getResponse(@Query("sf") String searchString);
}
我尝试编写解析缩写解码及其使用频率的应用程序。用户输入缩写,例如“kg”。因此,应用程序应连接到“http://nactem.ac.uk/software/acromine/dictionary.py?sf=kg”并解析它。
模型 classes 应该是什么样的?我是否在界面中正确描述了@Geth?怎么获取列表,我做了一个adapter,绑定到列表上,但是getResponse()我不太清楚
接口:
public interface SService {
@GET("dictionary.py?")
Call<Example> getResponse(@Query("sf=") String searchString);
}
改装客户端:
public class RetrofitClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(String baseUrl) {
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
并添加class ApiUtils
public class ApiUtils {
public static final String BASE_URL = "http://nactem.ac.uk/software/acromine/";
public static SService getSOService() {
return RetrofitClient.getClient(BASE_URL).create(SService.class);
}
}
主要活动
public class MainActivity extends AppCompatActivity {
private ArrayList<Lf> elements = new ArrayList();
EditText editText1;
ElementAdapter stateAdapter;
ListView list;
private SService mService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText1 = (EditText) findViewById(R.id.edit_text);
mService = ApiUtils.getSOService();
list = (ListView) findViewById(R.id.fragment_list);
stateAdapter = new ElementAdapter(this, R.layout.list_item, elements);
list.setAdapter(stateAdapter);
}
public void loadAnswers() {
mService.getResponse(editText1.getText().toString()).enqueue(new Callback<Example>() {
@Override
public void onResponse(Call<Example> call, Response<Example> response) {
if(response.isSuccessful()) {
stateAdapter.updateAnswers(response.body().getLfs());
} else {
int statusCode = response.code();
// handle request errors depending on status code
}
}
@Override
public void onFailure(Call<Example> call, Throwable t) {
}
});
}
public void activity_button(View view) {
//stateAdapter.clear();
loadAnswers();
}
}
更新!! 所有输入数据都是一个数组:Array[Object{...}]。解析它的正确接口: public 接口 SService {
@GET("dictionary.py")
Call<List<Example>> getResponse(@Query("sf") String searchString);
}
因此,我们得到带有示例对象的调用列表(在这种情况下只有一个对象)。
把SService
界面改成下面这样,
public interface SService {
@GET("dictionary.py")
Call<Example> getResponse(@Query("sf") String searchString);
}