我将代码写到了一个活动中,它可以完美地工作,但是当我将它们写入Java类并将结果发送到活动中时,在文本视图中没有显示任何内容。
public class TheaudiodbWebData {
private String result = "";
public String getResult() {
return result;
}
public TheaudiodbWebData() {
getBiographyData();
}
private void getBiographyData() {
String url = "https://www.theaudiodb.com/api/v1/json/1/search.php?s=coldplay";
AsyncHttpClient client = new AsyncHttpClient();
client.get(url, new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
parseBiographyData(responseString);
}
});
}
private void parseBiographyData(String response) {
try {
Gson gson = new Gson();
TheaudiodbArtistBio bio = gson.fromJson(response, TheaudiodbArtistBio.class);
result = bio.getArtists().get(0).getStrArtist();
} catch (Exception e) {
}
}
}
这是活动代码:
public class BiographyActivity extends AppCompatActivity {
TextView test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_biography);
test=findViewById(R.id.test);
TheaudiodbWebData bio=new TheaudiodbWebData();
test.setText(bio.getResult());
}
}
答案 0 :(得分:0)
如果您没有将数据从一个Activity
传递到另一个Activity
,并且得到的结果是很明显的。您正在onCreate()
方法中执行的部分代码:
TheaudiodbWebData bio=new TheaudiodbWebData();
test.setText(bio.getResult());
立即执行,但是您正在通过Internet获得结果,这意味着不会立即收到数据(连接服务器->获得结果->返回结果=需要一些时间)从互联网返回结果后触发的callback
方法onFailure
和onSuccess
,取决于成功与否。
因此,解决方案是使用一种方法来创建自己的interface
,您可以在其中传递结果,而不是实现该接口并创建自己的callback
方法。
或更简单的解决方案将这部分代码直接移到Activity
中,并将结果设置为TextView
方法中的onSucces
,例如:
private void getBiographyData() {
String url = "https://www.theaudiodb.com/api/v1/json/1/search.php?s=coldplay";
AsyncHttpClient client = new AsyncHttpClient();
client.get(url, new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
test.setText(responseString);
}
});
}
之后,只需在onCreate()
内部调用此方法,例如:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_biography);
test=findViewById(R.id.test);
getBiographyData();
}