在retrofit的Callback接口里的response怎么才能把body.toString赋给成员变量,或者存储在哪里,可以使其他类使用该结果

harrain 2017-01-09 11:13:02
我先定义的接口

public interface MemoryService {
@GET("goodbook/catalog")
Call<String> getBookCatalogQuery(@Query("key") String key);
}

然后MainActivity里

public class MainActivity extends AppCompatActivity {
private String s;
private StringBuffer sb = new StringBuffer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mainTv = (TextView) findViewById(R.id.main_tv);
retrofitForQuery();
Log.d("TAG s",s);
Log.d("TAG stringbuilder",sb.toString());
}

private void retrofitForQuery(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(URL)
.addConverterFactory(ScalarsConverterFactory.create())
.build();
MemoryService bookCatalog = retrofit.create(MemoryService.class);
Call call = bookCatalog.getBookCatalogQuery(key);//这里Call填不填加泛型都可以
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, final Response response) {

mainTv.setText(response.body().toString());
s= response.body().toString();//得不到值,s空
sb.append(response.body().toString());//StringBuilder也存不了值。

//我又这样存,试了试
saveResponse(response.body().toString());

}

@Override
public void onFailure(Call call, Throwable t) {

Log.d(TAG + "请求数据", "failure");

}
});
}

private void saveResponse(String str) {
s = str;
sb.append(str);
}//但还是存不住值


我想让其他类也能用到访问服务器的值,但retrofit这个接口里的结果怎么才能赋给成员变量,或者存储到某个地方,让它长久有效呢。请大神帮帮小白。
...全文
309 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_38221113 2017-04-07
  • 打赏
  • 举报
回复
你抓包,看看有没有请求成功. 和请求回来有没有数据
harrain 2017-01-09
  • 打赏
  • 举报
回复
哦,忘了告诉完整网址:http://apis.juhe.cn/goodbook/catalog?key=fef7afbad536b0e252663dead0105a64 。用的是聚合数据网站的免费数据。代码里的URL变量是"http://apis.juhe.cn/"。变量key值是"fef7afbad536b0e252663dead0105a64" 。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧