Это код, который я пытаюсь запустить:
package com.harshs.whatstheweather;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.InputStream;
import java.lang.*;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class MainActivity extends AppCompatActivity {
EditText cityName;
TextView resultTextView;
public void findWeather(View view) {
Log.i("Button", cityName.getText().toString());
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromInputMethod(cityName.getWindowToken(), 0);
try {
Weather task = new Weather();
String encodedURL = URLEncoder.encode(cityName.getText().toString(), "UTF-8");
task.execute("http://api.openweathermap.org/data/2.5/weather?q=" + encodedURL + "&appid=ecd9af9d7b34407890a8b4096b6b90e2");
} catch (Throwable e) {
Toast.makeText(getApplicationContext(), "Could not find the Weather", Toast.LENGTH_LONG);
}
}
class Weather extends AsyncTask < String, Void, String > {
@Override
protected String doInBackground(String...urls) {
String result = "";
URL url;
HttpURLConnection connection;
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 (Throwable e) {
Toast.makeText(getApplicationContext(), "Could not find the Weather", Toast.LENGTH_LONG);
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
String mess = "";
JSONObject jsonObject = new JSONObject(result);
String weatherInfo = jsonObject.getString("weather");
JSONArray arr = new JSONArray(weatherInfo);
for (int i = 0; i < arr.length(); i++) {
JSONObject jSonPart = arr.getJSONObject(i);
String main = "";
String description = "";
main = jSonPart.getString("main");
description = jSonPart.getString("description");
if (main != "" && description != "'") {
mess += main + ": " + description + "\r\n";
}
}
if (mess != "") {
resultTextView.setText(mess);
} else {
Toast.makeText(getApplicationContext(), "Could not find the Weather", Toast.LENGTH_LONG);
}
} catch (JSONException e) {
Toast.makeText(getApplicationContext(), "Could not find the Weather", Toast.LENGTH_LONG);
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cityName = (EditText) findViewById(R.id.cityName);
resultTextView = (TextView) findViewById(R.id.resultTextView);
}
}
У меня есть приложение, которое я создаю, но операторы catch не работают. Всякий раз, когда возникает исключение, приложение вылетает, и в журналах появляется следующая ошибка, и я не знаю почему. Пожалуйста, помогите!
Вот ошибка:
Неустранимое исключение: AsyncTask # 1 Процесс: com.harshs.whatstheweather, PID: 11019 java .lang.RuntimeException: An произошла ошибка при выполнении doInBackground () в android .os.AsyncTask $ 3.done (AsyncTask. java: 318) в java .util.concurrent.FutureTask.finishCompletion (FutureTask. java: 354) в java .util.concurrent.FutureTask.setException (FutureTask. java: 223) в java .util.concurrent.FutureTask.run (FutureTask. java: 242) в android .os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask. java: 243) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1133) в java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPo). java: 607) в java .lang.Thread.run (Thread. java: 761) Причина: java .lang.RuntimeException: Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare () в android .os.Handler. (Обработчик. java: 200) в android .os.Handler. (Обработчик. java: 114) в android .widget.Toast $ TN. (Toast. java: 346) в android .widget.Toast. (Toast. java: 101) в android .widget.Toast.makeText (Toast. java: 260) в com.harshs .whatstheweather.MainActivity $ Weather.doInBackground (MainActivity. java: 85) на com.harshs.whatstheweather.MainActivity $ Weather.doInBackground (MainActivity. java: 52) на android .os.AsyncTask $ 2.call ( AsyncTask. java: 304) в java .util.concurrent.FutureTask.run (FutureTask. java: 237) в android .os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask. java: 243 ) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1133) в java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 607) в java. lang.Thread.run (Тема. java: 761)
Скажите, пожалуйста, что означает ошибка.