Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android Studio中,我在;“背景法”;_Java_Android - Fatal编程技术网

Java 在Android Studio中,我在;“背景法”;

Java 在Android Studio中,我在;“背景法”;,java,android,Java,Android,这里第一个getWeather方法execute,它执行DownloadTask方法,当用户传递一些空值,getWeather中的th链接不正确时,在doInBackground方法中,当获取输入流时,它显示致命错误 package com.ssd.weatherapp; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.os.AsyncTask; i

这里第一个getWeather方法execute,它执行DownloadTask方法,当用户传递一些空值,getWeather中的th链接不正确时,在doInBackground方法中,当获取输入流时,它显示致命错误

package com.ssd.weatherapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
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.JSONObject;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

public class MainActivity extends AppCompatActivity {

    EditText editText;
    TextView resultTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);
        resultTextView = findViewById(R.id.resultTextView);

     }

    public void getWeather (View view){
        try {
            DownloadTask task = new DownloadTask();

            String encodedCityName = URLEncoder.encode(editText.getText().toString(), "UTF-8");

            task.execute("https://openweathermap.org/data/2.5/weather?q=" + encodedCityName + "&appid=439d4b804bc8187953eb36d2a8c26a02\n");

            InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

            mgr.hideSoftInputFromWindow(editText.getWindowToken(), 0);

        }catch(Exception e){
            e.printStackTrace();
            Log.i("info","1st one");
            Toast.makeText(getApplicationContext(),"Could not find weather :(",Toast.LENGTH_SHORT).show();

        }
    }


    public class DownloadTask extends AsyncTask<String,Void,String> {

        @Override
        protected String doInBackground(String... urls) {
            String result = "";
            URL url;
            HttpURLConnection urlConnection = null;



            try{
                url = new URL(urls[0]);

                urlConnection= (HttpURLConnection) url.openConnection();
                System.out.println(urlConnection.getInputStream());

                InputStream in =  urlConnection.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(),"Could not find weather :(",Toast.LENGTH_SHORT).show();
                return null;

            }

        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);

            try {

                JSONObject jsonObject = new JSONObject(s);

                String weatherInfo = jsonObject.getString("weather");
                Log.i("info",weatherInfo);

                JSONArray arr = new JSONArray(weatherInfo);

                String msg ="";

                for(int i=0; i < arr.length(); i++){
                    JSONObject jsonPart= arr. getJSONObject(i);

                   String main = jsonPart.getString("main");
                   String description =jsonPart.getString("description");

                   if(!main.equals("") && !description.equals("")){
                       msg += main + ": " + description + "\r\n";
                   }
                }

                if(!msg.equals("")){
                    resultTextView.setText(msg);
                }else{
                    Log.i("info","3rd one");
                    Toast.makeText(getApplicationContext(),"Could not find weather :(",Toast.LENGTH_SHORT).show();

                }

            }catch(Exception e){
                e.printStackTrace();
                Log.i("info","4th one");
                Toast.makeText(getApplicationContext(),"Could not find weather :(",Toast.LENGTH_SHORT).show();
            }

        }
    }

}
package com.ssd.weatherapp;
导入androidx.appcompat.app.appcompat活动;
导入android.content.Context;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.view.inputmethod.InputMethodManager;
导入android.widget.EditText;
导入android.widget.TextView;
导入android.widget.Toast;
导入org.json.JSONArray;
导入org.json.JSONObject;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.net.urlcoder;
公共类MainActivity扩展了AppCompatActivity{
编辑文本编辑文本;
TextView结果TextView;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=findViewById(R.id.editText);
resultTextView=findViewById(R.id.resultTextView);
}
公共天气(视图){
试一试{
DownloadTask任务=新建DownloadTask();
字符串encodedCityName=URLEncoder.encode(editText.getText().toString(),“UTF-8”);
任务。执行(“https://openweathermap.org/data/2.5/weather?q=“+encodedCityName+”&appid=439d4b804bc8187953eb36d2a8c26a02\n”);
InputMethodManager mgr=(InputMethodManager)getSystemService(Context.INPUT\u方法\u服务);
mgr.hideSoftInputFromWindow(editText.getWindowToken(),0);
}捕获(例外e){
e、 printStackTrace();
日志i(“信息”,“第一条”);
Toast.makeText(getApplicationContext(),“找不到天气:(”,Toast.LENGTH_SHORT).show();
}
}
公共类DownloadTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…URL){
字符串结果=”;
网址;
HttpURLConnection-urlConnection=null;
试一试{
url=新url(url[0]);
urlConnection=(HttpURLConnection)url.openConnection();
System.out.println(urlConnection.getInputStream());
InputStream in=urlConnection.getInputStream();
InputStreamReader reader=新的InputStreamReader(in);
int data=reader.read();
while(数据!=-1){
当前字符=(字符)数据;
结果+=电流;
data=reader.read();
}
返回结果;
}捕获(例外e){
e、 printStackTrace();
Toast.makeText(getApplicationContext(),“找不到天气:(”,Toast.LENGTH_SHORT).show();
返回null;
}
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
试一试{
JSONObject JSONObject=新的JSONObject;
字符串weatherInfo=jsonObject.getString(“天气”);
Log.i(“信息”,weatherInfo);
JSONArray arr=新JSONArray(天气信息);
字符串msg=“”;
对于(int i=0;i
当我未在textView中键入任何内容并将其发送到downloadTask类时发生的错误,应用程序崩溃并显示此错误,而不是显示异常并发出祝酒词:

2020-06-16 00:01:46.117 7948-7986/com.ssd.weatherapp D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err: java.io.FileNotFoundException: https://openweathermap.org/data/2.5/weather?q=&appid=439d4b804bc8187953eb36d2a8c26a02
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:251)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:     at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:     at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:26)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:     at com.ssd.weatherapp.MainActivity$DownloadTask.doInBackground(MainActivity.java:74)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:     at com.ssd.weatherapp.MainActivity$DownloadTask.doInBackground(MainActivity.java:60)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:333)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2020-06-16 00:01:47.530 7948-7986/com.ssd.weatherapp W/System.err:     at java.lang.Thread.run(Thread.java:764)

    --------- beginning of crash
2020-06-16 00:01:47.532 7948-7986/com.ssd.weatherapp E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    Process: com.ssd.weatherapp, PID: 7948
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:354)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
        at java.util.concurrent.FutureTask.run(FutureTask.java:271)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare()
        at android.widget.Toast$TN.<init>(Toast.java:393)
        at android.widget.Toast.<init>(Toast.java:117)
        at android.widget.Toast.makeText(Toast.java:280)
        at android.widget.Toast.makeText(Toast.java:270)
        at com.ssd.weatherapp.MainActivity$DownloadTask.doInBackground(MainActivity.java:94)
        at com.ssd.weatherapp.MainActivity$DownloadTask.doInBackground(MainActivity.java:60)
        at android.os.AsyncTask$2.call(AsyncTask.java:333)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:764) 
2020-06-16 00:01:47.919 7948-7976/com.ssd.weatherapp D/EGL_emulation: eglMakeCurrent: 0xe7740080: ver 2 0 (tinfo 0xdfb95320)
2020-06-16 00:01:46.117 7948-7986/com.ssd.weatherapp D/NetworkSecurityConfig:未指定网络安全配置,使用平台默认设置
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:java.io.FileNotFoundException:https://openweathermap.org/data/2.5/weather?q=&appid=439d4b804bc8187953eb36d2a8c26a02
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:251)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:26)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:at com.ssd.weatherapp.MainActivity$DownloadTask.doInBackground(MainActivity.java:74)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:at com.ssd.weatherapp.MainActivity$DownloadTask.doInBackground(MainActivity.java:60)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:at-android.os.AsyncTask$2.call(AsyncTask.java:333)
2020-06-16 00:01:47.529 7948-7986/com.ssd.weatherapp W/System.err:at ja