MainActivity中的Android/Java:x无法在接口中实现Y

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 试图分

我是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阅读了这篇重复的文章,下次就用谷歌搜索你的错误