Java 每当我没有在EditText中输入任何内容时,应用程序就会崩溃

Java 每当我没有在EditText中输入任何内容时,应用程序就会崩溃,java,android,json,android-studio,runtime-error,Java,Android,Json,Android Studio,Runtime Error,我正在制作一个天气应用程序,但每当我没有在EditText中输入或输入错误的城市名称时,应用程序就会崩溃,即使我使用了try and catch块进行错误处理。下面是java、xml代码和日志,其中显示了运行时错误 爪哇 package com.atul.whatstheweather; 导入android.os.AsyncTask; 导入android.support.v7.app.AppActivity; 导入android.os.Bundle; 导入android.util.Log; 导入

我正在制作一个天气应用程序,但每当我没有在EditText中输入或输入错误的城市名称时,应用程序就会崩溃,即使我使用了try and catch块进行错误处理。下面是java、xml代码和日志,其中显示了运行时错误

爪哇

package com.atul.whatstheweather;
导入android.os.AsyncTask;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.EditText;
导入android.widget.TextView;
导入android.widget.Toast;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
公共类MainActivity扩展了AppCompatActivity{
编辑文本城市名称;
TextView天气信息;
公共类内容扩展异步任务
{
@凌驾
受保护的字符串doInBackground(字符串…URL){
网址;
HttpURLConnection-urlConnection=null;
字符串结果=”;
试一试{
url=新url(url[0]);
urlConnection=(HttpURLConnection)url.openConnection();
InputStream InputStream=urlConnection.getInputStream();
InputStreamReader reader=新的InputStreamReader(inputStream);
int data=reader.read();
while(数据!=-1)
{
当前字符=(字符)数据;
结果+=电流;
data=reader.read();
}
返回结果;
}捕获(例外e){
Toast.makeText(MainActivity.this,“URL故障”,Toast.LENGTH_SHORT.show();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
试一试{
JSONObject JSONObject=新JSONObject(结果);
String weatherData=jsonObject.getString(“天气”);
JSONArray数组=新的JSONArray(weatherData);

对于(int i=0;i应用程序崩溃,因为您正在后台线程中调用
Toast

将catch block
Toast.makeText(MainActivity.this,“URL故障”,Toast.LENGTH\u SHORT.show();
中的Toast行替换为:

    new Handler(Looper.getMainLooper()).post(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(MainActivity.this, "URL malfunctioned", Toast.LENGTH_SHORT).show();
        }
    });

只需删除AsyncTask类的
Toast.makeText

doInBackground方法,该方法在单独的线程上而不是在UI线程上运行。您不能在此函数内显示Toast。请删除
Toast.makeText(MainActivity.this,“URL故障”,Toast.LENGTH\u SHORT)。show()
来自Catch block。您应该尝试改型、查看模型和livedata。并避免让您的类承担多个职责。
05/03 17:35:25: Launching app
Cold swapped changes.
$ adb shell am start -n "com.atul.whatstheweather/com.atul.whatstheweather.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 18757 on device xiaomi-redmi_note_3-9b51ac51
I/art: Late-enabling -Xcheck:jni
D/TidaProvider: TidaProvider()
W/ReflectionUtils: java.lang.NoSuchMethodException: android.os.MessageQueue#enableMonitor()#bestmatch
                       at miui.util.ReflectionUtils.findMethodBestMatch(ReflectionUtils.java:338)
                       at miui.util.ReflectionUtils.findMethodBestMatch(ReflectionUtils.java:375)
                       at miui.util.ReflectionUtils.callMethod(ReflectionUtils.java:800)
                       at miui.util.ReflectionUtils.tryCallMethod(ReflectionUtils.java:818)
                       at android.os.BaseLooper.enableMonitor(BaseLooper.java:47)
                       at android.os.Looper.prepareMainLooper(Looper.java:111)
                       at android.app.ActivityThread.main(ActivityThread.java:5586)
                       at java.lang.reflect.Method.invoke(Native Method)
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:774)
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
W/ResourceType: No package identifier when getting name for resource number 0x00000000
W/System: ClassLoader referenced unknown path: /data/app/com.atul.whatstheweather-1/lib/arm64
I/InstantRun: Instant Run Runtime started. Android package is com.atul.whatstheweather, real application class is null.
W/System: ClassLoader referenced unknown path: /data/app/com.atul.whatstheweather-1/lib/arm64
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
D/AccessibilityManager: current package=com.atul.whatstheweather, accessibility manager mIsFinalEnabled=false, mOptimizeEnabled=false, mIsUiAutomationEnabled=false, mIsInterestedPackage=false
V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@9df51ef
V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@ce6e4fc
D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
I/Adreno: QUALCOMM build                   : a7823f5, I59a6815413
          Build Date                       : 09/23/16
          OpenGL ES Shader Compiler Version: XE031.07.00.00
          Local Branch                     : mybranch22028469
          Remote Branch                    : quic/LA.BR.1.3.3_rb2.26
          Remote Branch                    : NONE
          Reconstruct Branch               : NOTHING
I/OpenGLRenderer: Initialized EGL, version 1.4
E/HAL: hw_get_module_by_class: module name gralloc
E/HAL: hw_get_module_by_class: module name gralloc
I/clicked: is working
I/DpmTcmClient: RegisterTcmMonitor from: com.android.okhttp.TcmIdleTimerMonitor
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                  Process: com.atul.whatstheweather, PID: 18757
                  java.lang.RuntimeException: An error occurred while executing doInBackground()
                      at android.os.AsyncTask$3.done(AsyncTask.java:309)
                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                      at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                      at java.lang.Thread.run(Thread.java:818)
                   Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
                      at android.os.Handler.<init>(Handler.java:200)
                      at android.os.Handler.<init>(Handler.java:114)
                      at android.widget.Toast$TN.<init>(Toast.java:356)
                      at android.widget.Toast.<init>(Toast.java:101)
                      at android.widget.Toast.makeText(Toast.java:266)
                      at com.atul.whatstheweather.MainActivity$Content.doInBackground(MainActivity.java:60)
                      at com.atul.whatstheweather.MainActivity$Content.doInBackground(MainActivity.java:31)
                      at android.os.AsyncTask$2.call(AsyncTask.java:295)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                      at java.lang.Thread.run(Thread.java:818) 
I/Process: Sending signal. PID: 18757 SIG: 9
Application terminated.
    new Handler(Looper.getMainLooper()).post(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(MainActivity.this, "URL malfunctioned", Toast.LENGTH_SHORT).show();
        }
    });