MainActivity中的Android/Java:x无法在接口中实现Y
我是Java新手,我似乎无法理解这一点 我试图从URL获取网页txt文件的内容,并将每一行添加到ArrayList中 我可以在onPostExecute中使用Log.d吐出数组,但我希望能够在MainActivity中返回ArrayList,然后执行一些验证,并将结果传递给另一个类进行处理 我试着遵循这个答案: 我得到以下错误: 错误:25,10错误:MainActivity中的processFinishArrayList 无法在异步响应中实现processFinishArrayList 试图分配较弱的访问权限;是公开的 任何帮助都将不胜感激 主要活动:MainActivity中的Android/Java:x无法在接口中实现Y,java,android,android-asynctask,implements,Java,Android,Android Asynctask,Implements,我是Java新手,我似乎无法理解这一点 我试图从URL获取网页txt文件的内容,并将每一行添加到ArrayList中 我可以在onPostExecute中使用Log.d吐出数组,但我希望能够在MainActivity中返回ArrayList,然后执行一些验证,并将结果传递给另一个类进行处理 我试着遵循这个答案: 我得到以下错误: 错误:25,10错误:MainActivity中的processFinishArrayList 无法在异步响应中实现processFinishArrayList 试图分
package uk.co.mmotti.nothanks;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.util.ArrayList;
import uk.co.mmotti.nothanks.HostProcessing.fetchHosts;
public class MainActivity extends AppCompatActivity implements AsyncResponse {
fetchHosts asyncFetchHosts = new fetchHosts();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
asyncFetchHosts.delegate = this;
asyncFetchHosts.execute("https://exampletexturl.com/");
}
@Override
/* THIS IS WHERE THE ERROR OCCURS ************************/
void processFinish(ArrayList<String> output){
//Here you will receive the result fired from async class
//of onPostExecute(result) method.
}
}
获取主机
package uk.co.mmotti.nothanks.HostProcessing;
import android.os.AsyncTask;
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import uk.co.mmotti.nothanks.AsyncResponse;
public class fetchHosts extends AsyncTask<String, Integer, ArrayList<String>> {
public AsyncResponse delegate = null;
@Override
protected ArrayList<String> doInBackground(String...hostUrl) {
ArrayList<String> hosts = new ArrayList<>();
try
{
// Set the URL to the host parameter
URL url = new URL(hostUrl[0]);
// Open a new stream to the url
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
// Clear any values that may already be in 'line'
String readerLine = null;
// Whilst there are still lines to output
while((readerLine = in.readLine()) != null)
{
// Add host to array
hosts.add(readerLine);
}
// Close stream when done
in.close();
}
// On error exception
catch (IOException e)
{
e.printStackTrace();
}
// Output to PostExecute
return hosts;
}
protected void onPreExecute() {
}
protected void onProgressUpdate(Integer... values) {
}
@Override
protected void onPostExecute(ArrayList<String> hosts) {
//Log.d("MM: ", hosts.toString());
delegate.processFinish(hosts);
}
}
异步响应独立类/接口
package uk.co.mmotti.nothanks;
import java.util.ArrayList;
public interface AsyncResponse {
void processFinish(ArrayList<String> output);
}
只需编写public void processFinishArrayList输出{,而不是void processFinishArrayList输出{。
该方法必须是公共的…将MainActivity类中的void processFinishArrayList输出更改为public void processFinishArrayList输出将被重写的方法公开谢谢!为什么它必须在这里是公共的,但在AsyncResponse接口中是无效的?阅读链接的postExcellent-我还不能标记为答案,因为它太早了。什么当它在界面中无效时,它必须在这里公开的原因是什么?我还有很多东西要学。@mmotti阅读了这篇重复的文章,下次就用谷歌搜索你的错误