Asynctask создает проблемы - PullRequest
0 голосов
/ 04 апреля 2020

Мой код не работает так, как мне бы хотелось, я пытаюсь создать приложение для чтения новостей, и я застрял на самой первой фазе, содержимое URL не загружается. Это мой код:

enter code here

publi c класс MainActivity расширяет AppCompatActivity {

public class Reader extends AsyncTask<String,Void,String> {

    @Override
    protected String doInBackground(String... urls) {


        URL url;
        HttpURLConnection httpURLConnection;

        try{

            Log.i("Done","Doing..");
            url=new URL(urls[0]);
            httpURLConnection=(HttpURLConnection) url.openConnection();
            httpURLConnection.connect();
            InputStream inputStream=httpURLConnection.getInputStream();

            InputStreamReader inputStreamReader =new InputStreamReader(inputStream);

            int data=inputStreamReader.read();

            String res="";

            while(data!=-1) {

               char cur=(char)data;
               res+=cur;
                data=inputStreamReader.read();
            }

            return  res;

        }
        catch(Exception e){

            e.printStackTrace();
            Log.i("Error:","Incomplete");
              return "Failed..";
        }

    }


    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        Log.i("Website Html :",result);

    }
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Reader reader=new Reader();
    reader.execute("http://newsapi.org/v2/top-headlines?country=in&apiKey=b40bd04fbeb24e3e8d871f1ebdcf25fe");
}

}

Я также поставил разрешение для Inte rnet и сделал все необходимые шаги для решения эта проблема, спасибо заранее.

1 Ответ

0 голосов
/ 04 апреля 2020

Вы смешивали Activity с Asynctask.

Ниже приведен исправленный код, который дает правильные результаты.

import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        new Reader().execute("http://newsapi.org/v2/top-headlines?country=in&apiKey=b40bd04fbeb24e3e8d871f1ebdcf25fe");

    }

    public class Reader extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... urls) {

            URL url;
            HttpURLConnection httpURLConnection;

            try {

                Log.i("Done", "Doing..");
                url = new URL(urls[0]);
                httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.connect();
                InputStream inputStream = httpURLConnection.getInputStream();

                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);

                int data = inputStreamReader.read();

                String res = "";

                while (data != -1) {

                    char cur = (char) data;
                    res += cur;
                    data = inputStreamReader.read();
                }
                Log.i("result:", res);
                return res;

            } catch (Exception e) {

                e.printStackTrace();
                Log.i("Error:", e.toString());
                return "Failed..";
            }
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            Log.i("Website Html :", result);
        }
    }
}
...