这是因为
以下是我的onCreate:中的说明
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Client c = new Client();
String p=c.get();
((TextView) findViewById(R.id.textView)).setText(p);}
这是我的客户端类
public class Client {
public String prova;
public String get() {
String url = "FILE_JSON_ONLINE_URL";
AsyncHttpClient client = new AsyncHttpClient();
client.get(url, null, new
JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
prova = response.toString();
}
@Override
public void onFailure(int statusCode, Header[] headers, String res, Throwable t) {
}
});
return prova;
}
但我的texview是空的,就像命令client.get不起作用,有人可以帮我
Client
类的public String get()
方法在onSuccess()
设置值之前返回prova
。
这是正常的,因为这是一个异步调用。
在您的情况下,您必须在public String get()
方法中创建一个接口来处理异步调用,如下所示:
public class Client {
// This interface will be used in your get() method, and implement in your first snippet
public interface MyClientCallback {
public void onResponse(String value);
}
// Add your interface as param
public void get(MyClientCallback callback) {
```
// prova = response.toString();
callback.onReponse(response.toString());
```
}
}
然后你可以这样称呼它:
TextView textView = (TextView) findViewById(R.id.textView);
c.get(new MyClientCallback() {
@Override
public void onResponse(String value) {
textView.setText(value);
}
});
我希望它能帮助你。