我的应用未将天气信息添加到文本视图 (JSON)



我最近开始学习JSON以在我的应用程序中使用。我找到了一个天气API(openweathermap.org(并在我的应用程序上使用它。 该应用程序运行良好,但是当我按下按钮时,没有任何反应。我的源代码:

import android.content.Context;
import android.hardware.input.InputManager;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.io.*;
import java.net.*;
import java.util.*;
import android.util.*;
import android.view.*;
import android.view.inputmethod.InputMethodManager;
import android.widget.*;
import org.json.*;

public class MainActivity extends AppCompatActivity {
    EditText city;
    TextView weather, description;
    DownloadTask DownloadTask;
    public void showWeather (View view)
    {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(city.getWindowToken(), 0);
        try
        {
            String encodedCityName = URLEncoder.encode(city.getText().toString(), "UTF-8");
            DownloadTask = new DownloadTask();
            DownloadTask.execute("http://api.openweathermap.org/data/2.5/weather?q=" + encodedCityName + "&appid=812f300ec742971975bbde9a2e0ac0c1");
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
            Toast.makeText(getApplicationContext(), "Error!", Toast.LENGTH_LONG).show();
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        city = (EditText) findViewById(R.id.city);
        weather = (TextView) findViewById(R.id.weather);
        description = (TextView) findViewById(R.id.description);
    }
    public class DownloadTask extends AsyncTask<String, Void, String>
    {
        @Override
        protected String doInBackground(String... urls) {
            String result = "";
            URL url;
            HttpURLConnection connection =  null;
            try
            {
                url = new URL(urls[0]);
                connection = (HttpURLConnection) url.openConnection();
                InputStream in = connection.getInputStream();
                InputStreamReader reader = new InputStreamReader(in);
                int data = reader.read();
                while (data != 1)
                {
                    char current = (char) data;
                    result += current;
                    data = reader.read();
                }
                return result;
            }
            catch (Exception e)
            {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "Error!", Toast.LENGTH_LONG);
            }
            return null;
        }
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            Log.i("Weather content", result);
            try
            {
                JSONObject jsonObject = new JSONObject(result);
                String weatherInfo = jsonObject.getString("weather");
                Log.i("Weather Content", weatherInfo);
                JSONArray jsonArray = new JSONArray(weatherInfo);
                String getMain = "";
                String getDescription = "";
                for (int i = 0; i < jsonArray.length(); i++)
                {
                    JSONObject jsonPart = jsonArray.getJSONObject(i);
                    getMain = jsonPart.getString("main");
                    getDescription = jsonPart.getString("description");
                    Log.i("Main", getMain);
                }
                if (getMain != "" && getDescription != "")
                {
                    weather.setText(getMain);
                    description.setText(getDescription);
                }
            }
            catch (JSONException e)
            {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "Error!", Toast.LENGTH_LONG);
            }
        }
    }
}

吐司和日志都不起作用。

读取数据时出错。当得到 -1 而不是 1 时,您应该停止阅读。

         while (data != -1)
            {
                char current = (char) data;
                result += current;
                data = reader.read();
            }