android的问题:来自类的数据不会发送到活动

时间:2019-01-07 22:27:40

标签: java android

我将代码写到了一个活动中,它可以完美地工作,但是当我将它们写入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());
    }

}

1 个答案:

答案 0 :(得分:0)

如果您没有将数据从一个Activity传递到另一个Activity,并且得到的结果是很明显的。您正在onCreate()方法中执行的部分代码:

TheaudiodbWebData bio=new TheaudiodbWebData();
test.setText(bio.getResult());

立即执行,但是您正在通过Internet获得结果,这意味着不会立即收到数据(连接服务器->获得结果->返回结果=需要一些时间)从互联网返回结果后触发的callback方法onFailureonSuccess,取决于成功与否。

因此,解决方案是使用一种方法来创建自己的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();

 }