简体   繁体   中英

android studio how to fill textviews with data

i am desperate and i dont know how to solve my problem. i want to change text on my textview elements when i press refresh button. i am parsing json file (connection and values are okay) and i want textview values to change accordingly to my json.

Fragment.java:

public class Fragment extends Fragment {

    String v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36;

    final String LOG_TAG = Fragment.class.getSimpleName();

    public Fragment() {
    }
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.fragment, menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_fresh) {
            FetchWeatherTask weatherTask = new FetchWeatherTask();
            weatherTask.execute("94043");
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment, container, false);

        TextView t = (TextView)v.findViewById(R.id.reiksme1);
        t.setText(v3);



        Log.e(LOG_TAG, "reiksme ONCREATEVIEW:" + v3);
        return v;
    }
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    public class FetchWeatherTask extends AsyncTask<String, Void, String[]> {
        public String[] resultStrs = new String[23];
        private final String LOG_TAG = FetchWeatherTask.class.getSimpleName();

        private String[] getWeatherDataFromJson(String forecastJsonStr, int numDays)
                throws JSONException {

            // These are the names of the JSON objects that need to be extracted.
            final String OWM_LIST = "list";
            final String OWM_WEATHER = "weather";

            final String OWM_timestamp = "timestamp";
            final String OWM_zeno_BP1_5s_Mb = "zeno_BP1_5s_Mb";
            final String OWM_zeno_Spd_5s_Kt = "zeno_Spd_5s_Kt";
            final String OWM_zeno_PP_30s_Mm = "zeno_PP_30s_Mm";
            final String OWM_zeno_PP_24h_Mm = "zeno_PP_24h_Mm";
            final String OWM_zeno_AT_5s_C = "zeno_AT_5s_C";
            final String OWM_zeno_BIT = "zeno_BIT";
            final String OWM_zeno_gust = "zeno_gust";
            final String OWM_zeno_RH_5s = "zeno_RH_5s";
            final String OWM_zeno_V_DC = "zeno_V_DC";
            final String OWM_zeno_BP2_5s_Mb = "zeno_BP2_5s_Mb";
            final String OWM_zeno_Dir_5s = "zeno_Dir_5s";
            final String OWM_zeno_WSonicBIT = "zeno_WSonicBIT";
            final String OWM_zeno_ID = "zeno_ID";
            final String OWM_cl31_high_sig = "cl31_high_sig";
            final String OWM_cl31_ClH2_30s_Ft = "cl31_ClH2_30s_Ft";
            final String OWM_cl31_ClH1_30s_Ft = "cl31_ClH1_30s_Ft";
            final String OWM_cl31_Range_Ft = "cl31_Range_Ft";
            final String OWM_cl31_Detect = "cl31_Detect";
            final String OWM_cl31_raw = "cl31_raw";
            final String OWM_cl31_ClH3_30s_Ft = "cl31_ClH3_30s_Ft";
            final String OWM_sws200_PP_Mm = "sws200_PP_Mm";
            final String OWM_sws200_synop_code = "sws200_synop_code";
            final String OWM_sws200_Vis_1m_KM = "sws200_Vis_1m_KM";


            JSONObject forecastJson = new JSONObject(forecastJsonStr);
            JSONArray weatherArray = forecastJson.getJSONArray(OWM_LIST);


                // Get the JSON object representing the day
                JSONObject dayForecast = weatherArray.getJSONObject(0);

                // description is in a child array called "weather", which is 1 element long.

                JSONObject weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v1 = weatherObject.getString(OWM_timestamp);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v2 = weatherObject.getString(OWM_zeno_BP1_5s_Mb);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v3 = weatherObject.getString (OWM_zeno_Spd_5s_Kt);
            Log.e(LOG_TAG, "reiksme inicializacija:" + v3);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v4 = weatherObject.getString(OWM_zeno_PP_30s_Mm);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v5 = weatherObject.getString (OWM_zeno_PP_24h_Mm);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v6 = weatherObject.getString(OWM_zeno_AT_5s_C);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v7 = weatherObject.getString (OWM_zeno_BIT);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v8 = weatherObject.getString(OWM_zeno_gust);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v9 = weatherObject.getString (OWM_zeno_RH_5s);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v10 = weatherObject.getString(OWM_zeno_V_DC);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v11 = weatherObject.getString (OWM_zeno_BP2_5s_Mb);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v12 = weatherObject.getString(OWM_zeno_Dir_5s);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v13 = weatherObject.getString (OWM_zeno_WSonicBIT);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v14 = weatherObject.getString(OWM_zeno_ID);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v21 = weatherObject.getString(OWM_cl31_high_sig);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v24 = weatherObject.getString (OWM_cl31_ClH2_30s_Ft);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v25 = weatherObject.getString(OWM_cl31_ClH1_30s_Ft);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v26 = weatherObject.getString (OWM_cl31_Range_Ft);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v27 = weatherObject.getString(OWM_cl31_Detect);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v29 = weatherObject.getString(OWM_cl31_ClH3_30s_Ft);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v31 = weatherObject.getString (OWM_sws200_PP_Mm);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v33 = weatherObject.getString (OWM_sws200_synop_code);
                weatherObject = dayForecast.getJSONArray(OWM_WEATHER).getJSONObject(0);
                v34 = weatherObject.getString(OWM_sws200_Vis_1m_KM);


                resultStrs[0] = v1;
                resultStrs[1] = v2;
                resultStrs[2] = "Vėjo greitis: " + v3;
                resultStrs[3] = "Kritulių kiekis per 30s: " + v4;
                resultStrs[4] = "Krituliu kiekio suma per einamą parą: " + v5;
                resultStrs[5] = "Momentinė temperatūra: " + v6;
                resultStrs[6] = v7;
                resultStrs[7] = "Vėjo gūsio stiprumas: " + v8;
                resultStrs[8] = "Santykinis oro drėgnis: " + v9;
                resultStrs[9] = v10;
                resultStrs[10] = "Atmosferos slėgis stoties lygyje: " + v11;
                resultStrs[11] = v12;
                resultStrs[12] = "Vėjo kryptis: " + v13;
                resultStrs[13] = v14;
                resultStrs[14] = v21;
                resultStrs[15] = "Vidurinio aukšto debesų pado aukštis: " + v24;
                resultStrs[16] = "Žemutinio aukšto debesų pado aukštis: " + v25;
                resultStrs[17] = v26;
                resultStrs[18] = v27;
                resultStrs[19] = v29;
                resultStrs[20] = v31;
                resultStrs[21] = "Esamų oro sąlygų kodas: " +v33;
                resultStrs[22] = "Horizontalus matomumas per 1 minutę: " + v34;


            for (String s : resultStrs) {
                Log.v(LOG_TAG, "Forecast entry: " + s);
            }
            Log.e(LOG_TAG, "reiksme paskui:" + v3);
            return resultStrs;

        }


        @Override
        protected String[] doInBackground(String... params) {

            // If there's no zip code, there's nothing to look up.  Verify size of params.
            if (params.length == 0) {
                return null;
            }

            // 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;

            int numDays = 23;

            try {
                // Construct the URL for the OpenWeatherMap query
                // Possible parameters are avaiable at OWM's forecast API page, at
                // http://openweathermap.org/API#forecast


                Uri builtUri = Uri.parse(FORECAST_BASE_URL).buildUpon()
                        .build();

                URL url = new URL(builtUri.toString());

                Log.v(LOG_TAG, "Built URI " + builtUri.toString());

                // 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.
                    return 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.
                    return null;
                }
                forecastJsonStr = buffer.toString();

                Log.v(LOG_TAG, "Forecast string: " + forecastJsonStr);
            } catch (IOException e) {
                Log.e(LOG_TAG, "Error ", e);
                // If the code didn't successfully get the weather data, there's no point in attemping
                // to parse it.
                return null;
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (final IOException e) {
                        Log.e(LOG_TAG, "Error closing stream", e);
                    }
                }
            }

            try {
                return getWeatherDataFromJson(forecastJsonStr, numDays);
            } catch (JSONException e) {
                Log.e(LOG_TAG, e.getMessage(), e);
                e.printStackTrace();
            }

            // This will only happen if there was an error getting or parsing the forecast.
            return null;
        }



    }

}

Activity:

public class Activity extends ActionBarActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new Fragment())
                    .commit();
        }

    }


}

in Fragment in onCreateView ia m trying to change text by:

View v = inflater.inflate(R.layout.fragment, container, false);

TextView t = (TextView)v.findViewById(R.id.reiksme1);
t.setText(v3);

but logcat says that it is null

i realize that at firs my oncreateview method ir being runned and only then the method from which i should get value. is there any way for my to change textview values after i get values from my json file?

You can override onPostExecute() function to do that. Add this function to your AsyncTask class

 protected void onPostExecute(String[] result) {
     t.setText(v3);
 }

but in this case the TextView t has to be a member of your Fragment class

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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