繁体   English   中英

Android FATAL EXCEPTION异步任务#1

[英]Android FATAL EXCEPTION Asynch Task #1

我正在尝试制作一个简单的天气应用程序。 每当我尝试访问Yahoo weather api返回JSON对象时,都会收到此异常。 为了在没有api的情况下完成任务,我将JSON对象复制粘贴到了单独的字符串中,并一直将该字符串作为JSON对象使用。

这是我的任务:

公共类WeatherInfoThread扩展了AsyncTask {

    @Override
    protected String doInBackground(Void... params) {

        String resultString = null;
        try {
            url = new URL("https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22"+location+"%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        try {
            connection = url.openConnection();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            inputStream = connection.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

        try {
            jsonInfo = bufferedReader.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }

        resultString = jsonInfo;



        try {
            weatherinfo = new JSONObject(testString);
            // Log.d(JSON_INFO,weatherinfo.toString()+"df");
            JSONObject channel = weatherinfo.getJSONObject("query").getJSONObject("results").getJSONObject("channel");
            JSONObject item = channel.getJSONObject("item");
            currentTemp = item.getJSONObject("condition");
            cCurrentInt = currentTemp.getInt("code");

            forecast = item.getJSONArray("forecast");
            cOne = forecast.getJSONObject(1).getString("text");
            cTwo = forecast.getJSONObject(2).getString("text");
            cThree = forecast.getJSONObject(3).getString("text");
            cFour = forecast.getJSONObject(4).getString("text");
            cFive = forecast.getJSONObject(5).getString("text");
            dOne = forecast.getJSONObject(1).getString("day");
            dTwo = forecast.getJSONObject(2).getString("day");
            dThree = forecast.getJSONObject(3).getString("day");
            dFour = forecast.getJSONObject(4).getString("day");
            dFive = forecast.getJSONObject(5).getString("day");


            // Log.d(JSON_INFO,forecast.get(1).toString()+"ddf");




        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

这是我得到的错误:

12-16 16:48:06.677 10523-10549 / com.example.aakashmahesh.weatherapp E / AndroidRuntime:致命例外:AsyncTask#1 java.lang.RuntimeException:在android.os.AsyncTask $ 3执行doInBackground()时发生错误.done(AsyncTask.java:299)在java.util.concurrent.FutureTask $ Sync.innerSetException(FutureTask.java:273)在java.util.concurrent.FutureTask.setException(FutureTask.java:124)在java.util。并在java.util.concurrent.FutureTask.run(FutureTask.java:137)处并发.FutureTask $ Sync.innerRun(FutureTask.java:307)在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:569)at java.lang.Thread.run(Thread.java:856)由以下原因引起:java.lang.SecurityException:java.net.InetAddress.getAllByNameImpl(InetAddress.j)上的java.net.InetAddress.lookupHostByName(InetAddress.java:418)上的权限被拒绝(缺少INTERNET权限?) ava:236),位于libcore.net.http.HttpConnection。(HttpConnection.java:70),位于java.net.InetAddress.getAllByName(InetAddress.java:214),位于libcore.net.http.HttpConnection。(HttpConnection.java:50) ),位于libcore.net.http.HttpConnection.connect(HttpConnection。)的libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)处的libcore.net.http.HttpConnection $ Address.connect(HttpConnection.java:340)处。 libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)的java:128)libcore.net.http.HttpsURLConnectionImpl $ HttpsEngine的libcore.net.http.HttpsURLConnectionImpl $ HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461) libcore.net.http.Http.HttpEngine.sendSocketRequest(HttpEngine.java:289)(位于libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239))处的.connect(HttpsURLConnectionImpl.java:433)。 libcore.net上的HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)。libcore.ne上的http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168) t.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)位于com.example.aakashmahesh.weatherapp.MainActivity $ WeatherInfoThread.doInBackground(MainActivity.java:269)位于com.example.aakashmahesh.weatherapp.MainActivity $ WeatherInfoThread.doInBackground( MainActivity.java:250),位于android.os.AsyncTask $ 2.call(AsyncTask.java:287),位于java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305),位于java.util.concurrent.FutureTask。在java.util.concurrent上运行android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230)的run(FutureTask.java:137)在java.util.concurrent的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)的run(FutureTask.java:137)。 java.lang.Thread.run(Thread.java:856)上的ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:569):原因:libcore.io.GaiException:getaddrinfo失败:libcore处的EAI_NODATA(与主机名没有关联的地址)。 io.Posix.getaddrinfo(本机方法),位于libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55),位于java.net.InetAddress.lookupHostB 位于libcore.net.http.HttpConnection。(HttpConnection。)处的java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)处的yName(InetAddress.java:405)在java.net.InetAddress.getAllByName(InetAddress.java:214)处的yName(InetAddress.java:236) libcore.net.http.HttpConnection。(HttpConnection.java:50)处的java:70)libcore.net.http.HttpConnectionPool.get(libcore.net.http.HttpConnection $ Address.connect(HttpConnection.java:340)处的在libcore.net.http.HttpConnection.connect(HttpConnection.java:128)处的HttpConnectionPool.java:87)在libcore.net.http.Http.HttpsURLConnectionImpl $ HttpsEngine处的libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)处libcore.net的.makeSslConnection(HttpsURLConnectionImpl.java:461).libcore.net的http.HttpsURLConnectionImpl $ HttpsEngine.connect(HttpsURLConnectionImpl.java:433)。libcore.net的http.HttpEngine.sendSocketRequest(HttpEngine.java:289)。 libc.net上的http.HttpEngine.sendRequest(HttpEngine.java:239).libc上的http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)上的ore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)在com.example.aakashmahesh.weatherapp.MainActivity $ WeatherInfoThread.doInBackground(MainActivity。 java:269)位于com.example.aakashmahesh.weatherapp.MainActivity $ WeatherInfoThread.doInBackground(MainActivity.java:250)位于android.os.AsyncTask $ 2.call(AsyncTask.java:287)at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305),位于java.util.concurrent.FutureTask.run(FutureTask.java:137),位于android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230),位于java.util。并发于java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:569)处的java.lang.Thread.run(Thread.java:856)处的并发ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) .io.ErrnoException:getaddrinfo失败:libcore.io上的EACCES(权限被拒绝)在libcore.io上的Posix.getaddrinfo(本机方法)。 java.net.InetAddress.lookupHostByName(InetAddress.java:405)的ForwardingOs.getaddrinfo(ForwardingOs.java:55)java.net.InetAddress.getAllByName(InetAddress)的java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)的ForwardingOs.getaddrinfo(ForwardingOs.java:55) .java:214)位于libcore.net.http.HttpConnection。(HttpConnection.java:70)位于libcore.net.http.HttpConnection。(HttpConnection.java:50)liblib.net.http.HttpConnection $ Address.connect( libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)处的HttpConnection.java:340)libcore.net.http.HttpEngine.openSocketConnection处的libcore.net.http.HttpConnection.connect(HttpConnection.java:128)处的(httpEngine.java:315)在libcore.net.http.HttpsURLConnectionImpl $ HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)在libcore.net.http.HttpsURLConnectionImpl $ HttpsEngine.connect(HttpsURLConnectionImpl.java:433)在libcore.net。 libcore.net上的http.HttpEngine.sendSocketRequest(HttpEngine.java:289).libcore上的http.HttpEngine.sendRequest(HttpEngine.java:239) .net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)位于libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)位于libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271) com.example.aakashmahesh.weatherapp.MainActivity $ WeatherInfoThread.doInBackground(MainActivity.java:269)位于com.example.aakashmahesh.weatherapp.MainActivity $ WeatherInfoThread.doInBackground(MainActivity.java:250)在android.os.AsyncTask $ 2.call (AsyncTask.java:287)在java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305)在java.util.concurrent.FutureTask.run(FutureTask.java:137)在android.os.AsyncTask $ Java的SerialExecutor $ 1.run(AsyncTask.java:230)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:569)在java。 lang.Thread.run(Thread.java:856)12-16 16:48:06.677 1370-17136 / system_process W / ActivityManager: 强制完成活动com.example.aakashmahesh.weatherapp / .MainActivity 12-16 16:48:06.737 1370-17136 / system_process D / dalvikvm:GC_FOR_ALLOC释放647K,释放12%释放16559K / 18695K,暂停10ms,总计10ms 12-16 16 :48:06.767 10523-10523 / com.example.aakashmahesh.weatherapp D / libEGL:已加载/system/lib/egl/libEGL_emulation.so 12-16 16:48:06.767 10523-10523 / com.example.aakashmahesh.weatherapp D / libEGL:已加载/system/lib/egl/libGLESv1_CM_emulation.so 12-16 16:48:06.767 10523-10523 / com.example.aakashmahesh.weatherapp D / libEGL:已加载/system/lib/egl/libGLESv2_emulation.so

                                                                         [ 12-16 16:48:06.767 10523:10523 D/         ]
                                                                         HostConnection::get() New Host Connection established 0xb8071030, tid 10523

阅读错误,对吗?

由以下原因引起:java.lang.SecurityException:权限被拒绝(缺少INTERNET权限?)

可能是您未在清单文件中写入访问Internet的权限

由以下原因引起:java.lang.SecurityException:权限被拒绝(缺少INTERNET权限?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM