我目前正在尝试制作一个基本上从网址下载字符串的 Android 应用程序。但我想让它面向对象。我的 mainActivity 从 webService 获取字符串,当单击按钮时它会下载字符串。但我不擅长接口(interface)和回调。我应该怎么做才能让这段代码运行?
public class MainActivity extends Activity implements WebServiceInterface{
private TextView textView;
private Button readWebPage;
private WebService service;
private WebServiceInterface webServiceInterface;
private String response;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.TextView01);
readWebPage = (Button) findViewById(R.id.readWebpage);
service = new WebService();
readWebPage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
service.execute(new String[]{"http://google.com/"});
onSuccess(response);
}
});
}
@Override
public void onSuccess(String response) {
textView.setText(Html.fromHtml(response));
}
@Override
public void onFail(Exception ex) {
textView.setText(ex.getLocalizedMessage());
}
}
public class WebService extends AsyncTask<String, Void, String> {
private WebServiceInterface webServiceInterface;
@Override
protected String doInBackground(String... urls) {
String response = "";
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
webServiceInterface.onSuccess(response);
} catch (Exception e) {
e.printStackTrace();
webServiceInterface.onFail(e);
}
}
return response;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
}
public interface WebServiceInterface {
void onSuccess(String response);
void onFail(Exception ex);
}
最佳答案
您需要在 WebService 类中创建一个公共(public)方法来设置 webServiceInterface,例如
public setWebServiceInterface (WebServiceInterface listener)
{
this.webServiceInterface =listener;
}
在 MainActivity Activity 中调用此方法并传递参数 this
service.setWebServiceInterface (this);
在WebService类中的onPostExecute方法调用
webServiceInterface.onSuccess(s);
关于Android 上的 Java 接口(interface)回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37829745/