Android 上的 Java 接口(interface)回调

标签 java android interface callback

我目前正在尝试制作一个基本上从网址下载字符串的 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/

相关文章:

.net - .config 到构造函数的技巧?

java - 为什么WIndows的JRE 8 32位和64位离线安装文件大小相差这么大?

java - 检查android中的字符串数组中是否存在字符串时出现空指针异常?

android - 无法在 swipeRefreshLayout 中的 ListView 中滚动

java - 使用安全的 SSL 连接保存 session

Typescript:通过 'this' 获取自定义接口(interface)的类型?

java - 如何为 Map 实现创建自定义迭代器?

java - HTML 到格式化文本

android - <include> 标签没有准确显示它的内容

java - 在接口(interface)和抽象类中访问同名值-Java