2016-03-16 2 views
2
//this is the ForecastFragment file 

package com.example.sumanth.sunshine1.app; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

/** 
* A placeholder fragment containing a simple view. 
*/ 
public class ForecastFragment extends Fragment { 

    public ForecastFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView=inflater.inflate(R.layout.fragment_main, container, false); 
     String[] forecastArray={ 
       "Mon 6/23 - Sunny - 31/17", 
       "Tue 6/24 - Foggy - 21/8", 
       "Wed 6/25 - Cloudy - 22/17", 
       "Thurs 6/26 - Rainy - 18/11", 
       "Fri 6/27 - Foggy - 21/10", 
       "Sat 6/28 - TRAPPED IN WEATHERSTATION - 23/18", 
       "Sun 6/29 - Sunny - 20/7" 
            }; 
        List<String> weekForecast = new ArrayList<String>(Arrays.asList(forecastArray)); 



     ArrayAdapter<String> mForecastAdapter=new ArrayAdapter<String>(
       getActivity(), 
       R.layout.list_item_forecast, 
       R.id.list_item_forecast_textview, 
       weekForecast 

     ); 

     ListView listView=(ListView)  

rootView.findViewById (R.id.listview_forecast);Авария приложения udacity-sunshine даже после использования ASyncTask

 listView.setAdapter(mForecastAdapter); 

     return rootView; 

    } 

приложение отлично до этого section.but работает позже после установки сетевой код он не открывается (сбой) // это класс fetchweathertask, даже после перемещения сетевой код из приведенного выше класса приложение по-прежнему не запускается по телефону

public class FetchWeatherTask extends AsyncTask<Void, Void, Void> { 

       private final String LOG_TAG = FetchWeatherTask.class.getSimpleName(); 

         @Override 
       protected Void doInBackground(Void... params) { 
         // These two need to be declared outside the try/catch 
           // so that they can be closed in the finally block. 
          HttpURLConnection urlConnection = null; 
          BufferedReader reader = null; 

// Will contain the raw JSON response as a string. 
          String forecastJsonStr = null; 

          try { 
           // Construct the URL for the OpenWeatherMap query 
           // Possible parameters are available at OWM's forecast API page, at 
           // http://openweathermap.org/API#forecast 
           URL url = new URL("http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7"); 

           // Create the request to OpenWeatherMap, and open the connection 
           urlConnection = (HttpURLConnection) url.openConnection(); 
           urlConnection.setRequestMethod("GET"); 
           urlConnection.connect(); 

           // Read the input stream into a String 
           InputStream inputStream = urlConnection.getInputStream(); 
           StringBuffer buffer = new StringBuffer(); 
           if (inputStream == null) { 
            // Nothing to do. 
            forecastJsonStr = null; 
           } 
           reader = new BufferedReader(new InputStreamReader(inputStream)); 

           String line; 
           while ((line = reader.readLine()) != null) { 
            // Since it's JSON, adding a newline isn't necessary (it won't affect parsing) 
            // But it does make debugging a *lot* easier if you print out the completed 
            // buffer for debugging. 
            buffer.append(line + "\n"); 
           } 

           if (buffer.length() == 0) { 
            // Stream was empty. No point in parsing. 
            forecastJsonStr = null; 
           } 
           forecastJsonStr = buffer.toString(); 
          } catch (IOException e) { 
           Log.e("PlaceholderFragment", "Error ", e); 
           // If the code didn't successfully get the weather data, there's no point in attempting 
           // to parse it. 
           forecastJsonStr = null; 
          } finally{ 
           if (urlConnection != null) { 
            urlConnection.disconnect(); 
           } 
           if (reader != null) { 
            try { 
             reader.close(); 
            } catch (final IOException e) { 
             Log.e("PlaceholderFragment", "Error closing stream", e); 
            } 
           } 
          } 
         return null; 
        } 
    } 
} 
+1

новый для stackoverflow.kindly обязывает формат вопроса – Sumanth

ответ

0

Необходимо указать разрешение на Интернет в файле manifest.xml.

<uses-permission android:name="android.permission.INTERNET" /> 

Без этого приложение будет разбиваться.

Читать эту https://developer.android.com/training/basics/network-ops/connecting.html

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

У вас все еще есть другие дела, например, включить ключ API в строку url. Помните, что вы можете публиковать сообщения на форумах Udacity, где сотни студентов работают над этим же проектом прямо сейчас.

Смежные вопросы