1

I am still new to Android programming and trying to get my head around the AsyncTask() concept, though i have understood a lot, this one error is bugging me for a really long time. Please provide your valuable suggestions. I have made a weather app which using jsoup and some web scraping, it used to work perfectly and now i am getting this error and don't know what to do. Help is much appreciated.

Here is the code:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import android.os.AsyncTask;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    static TextView weatherInfo;
    TextView x_view;
    TextView y_view;
    EditText x_edit;
    EditText y_edit;
    Button submit_button;
    String cord_x;
    String cord_y;
    String f_coord;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        weatherInfo = findViewById(R.id.weather_info);
        x_view = findViewById(R.id.X_View);
        y_view = findViewById(R.id.Y_view);
        x_edit = findViewById(R.id.x_edittext);
        y_edit = findViewById(R.id.y_edittext);
        submit_button = findViewById(R.id.submit_button);
        submit_button.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        weatherInfo.setText("");
                        cord_x=x_edit.getText().toString();
                        cord_y=y_edit.getText().toString();
                        f_coord=cord_x+","+cord_y;
                        Weather runner = new Weather();
                        runner.execute(f_coord);
                    }
                }
        );



    }


    static class Weather extends AsyncTask<String, String, String> {
        String result = null;

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

            try {

                Document doc = Jsoup.connect("https://weather.com/en-IN/weather/today/l/"+string[0]).get();
                for (Element row : doc.select("header[class=loc-container]")) {
                    result=string[0]+" \nLocation: ";
                    result = result+row.text()+" ";
                }
                for (Element row : doc.select("div[class=today_nowcard-section today_nowcard-condition]")) {
                    result = result +"\nWeather Data:\n"+ (row.text());
                }


            } catch (IOException e) {
                e.printStackTrace();

            }
            return result;

        }

        @Override
        protected void onPostExecute(String s) {
            weatherInfo.append(s);

        }
    }
}

Here is the error report:

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                  Process: com.example.omkar.rainforest, PID: 3950
                  java.lang.RuntimeException: An error occurred while executing doInBackground()
                      at android.os.AsyncTask$3.done(AsyncTask.java:309)
                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                      at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                      at java.lang.Thread.run(Thread.java:818)
                   Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
                      at java.net.InetAddress.lookupHostByName(InetAddress.java:464)
                      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
                      at java.net.InetAddress.getAllByName(InetAddress.java:215)
                      at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
                      at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188)
                      at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)
                      at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100)
                      at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357)
                      at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340)
                      at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
                      at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
                      at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)
                      at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)
                      at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89)
                      at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java)
                      at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:746)
                      at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:722)
                      at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:306)
                      at org.jsoup.helper.HttpConnection.get(HttpConnection.java:295)
                      at com.example.omkar.rainforest.MainActivity$Weather.doInBackground(MainActivity.java:65)
                      at com.example.omkar.rainforest.MainActivity$Weather.doInBackground(MainActivity.java:57)
                      at android.os.AsyncTask$2.call(AsyncTask.java:295)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                      at java.lang.Thread.run(Thread.java:818) 
                   Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
                      at libcore.io.Posix.android_getaddrinfo(Native Method)
                      at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
                      at java.net.InetAddress.lookupHostByName(InetAddress.java:451)
                      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 
                      at java.net.InetAddress.getAllByName(InetAddress.java:215) 
                      at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) 
                      at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188) 
                      at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157) 
                      at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100) 
                      at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357) 
                      at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340) 
                      at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) 
                      at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) 
                      at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433) 
                      at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114) 
                      at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89) 
                      at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java) 
                      at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:746) 
                      at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:722) 
                      at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:306) 
                      at org.jsoup.helper.HttpConnection.get(HttpConnection.java:295) 
                      at com.example.omkar.rainforest.MainActivity$Weather.doInBackground(MainActivity.java:65) 
                      at com.example.omkar.rainforest.MainActivity$Weather.doInBackground(MainActivity.java:57) 
                      at android.os.AsyncTask$2.call(AsyncTask.java:295) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                      at java.lang.Thread.run(Thread.java:818) 
                   Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied)
                      at libcore.io.Posix.android_getaddrinfo(Native Method) 
                      at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55) 
                      at java.net.InetAddress.lookupHostByName(InetAddress.java:451) 
                      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 
                      at java.net.InetAddress.getAllByName(InetAddress.java:215) 
                      at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) 
                      at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188) 
                      at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157) 
                      at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100) 
                      at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357) 
                      at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340) 
                      at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) 
                      at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) 
                      at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433) 
                      at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114) 
                      at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89) 
                      at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java) 
                      at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:746) 
                      at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:722) 
                      at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:306) 
                      at org.jsoup.helper.HttpConnection.get(HttpConnection.java:295) 
                      at com.example.omkar.rainforest.MainActivity$Weather.doInBackground(MainActivity.java:65) 
                      at com.example.omkar.rainforest.MainActivity$Weather.doInBackground(MainActivity.java:57) 
                      at android.os.AsyncTask$2.call(AsyncTask.java:295) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                      at java.lang.Thread.run(Thread.java:818) 
E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaa3fc950
D/OpenGLRenderer: endAllStagingAnimators on 0xa284da80 (RippleDrawable) with handle 0xa283eaa0
I/Choreographer: Skipped 188 frames!  The application may be doing too much work on its main thread.
Application terminated.

4 Answers4

3

You just forgot to add INTERNET permission in manifest file

add below permission in manifest file it will work

<uses-permission android:name="android.permission.INTERNET" />
AskNilesh
  • 67,701
  • 16
  • 123
  • 163
1

Add internet permission in your manifest file like this

<manifest xlmns:android...>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
Navneet Krishna
  • 5,009
  • 5
  • 25
  • 44
1

You are missing INTERNET permission in AndroidManifest file. Please add below permission in AndroidManifest to fix the issue:

<uses-permission android:name="android.permission.INTERNET" />
Sagar Trehan
  • 2,401
  • 2
  • 24
  • 32
1

Going through the stack trace indicate what kind of permission you need in the manifest file.

     Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
                          at java.net.InetAddress.lookupHostByName(InetAddress.java:464)

    Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)

     Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied)

Please add the permission as below and it would sort out

<uses-permission android:name="android.permission.INTERNET" />
Rizwan
  • 2,369
  • 22
  • 27