Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/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 我的天气应用程序崩溃了_Java_Android - Fatal编程技术网

Java 我的天气应用程序崩溃了

Java 我的天气应用程序崩溃了,java,android,Java,Android,我正在尝试制作一个天气应用程序。如果你输入一个城市名称,它会给你天气信息,但是如果你输入了一个错误的城市名称,应用程序就会崩溃 protected String doInBackground(String... urls) { String result = ""; URL url; HttpURLConnection urlConnection = null; try { url = n

我正在尝试制作一个天气应用程序。如果你输入一个城市名称,它会给你天气信息,但是如果你输入了一个错误的城市名称,应用程序就会崩溃

        protected String doInBackground(String... urls) {

        String result = "";
        URL url;
        HttpURLConnection urlConnection = null;

        try {
            url = new URL(urls[0]);
            urlConnection = (HttpURLConnection) url.openConnection();
            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 (RuntimeException e){
            Toast.makeText(getApplicationContext(), "Could not find weather", Toast.LENGTH_LONG);

        } catch(Exception e) {
                Toast.makeText(getApplicationContext(), "Could not find weather", Toast.LENGTH_LONG);
        }

        return null;
错误


您的toast出现问题,使用UI线程显示toast

Activity_Name.this.runOnUiThread(new Runnable() {

        @Override
        public void run() {

           Toast.makeText(getApplicationContext(), "Could not find weather", Toast.LENGTH_LONG).show();


        }
    });

您可以显示城市名称列表以供选择,而不是获取键入的输入,这样就不会输入错误或不正确的输入


创建一个城市名称检查,看看它是否是一个有效的城市名称如果不是,不要让它继续下去。甚至可以通过匹配拼写来提供城市名称的建议。

您需要在主线程中使用Toast,使用runOnUiThread,或者返回字符串并在活动中使用Toast打印返回值。

boolean flag=false;///在类的顶部声明boolean它是一个类变量
boolean flag=false; // declare boolean  at the top of the class it's a class variable



public class Download extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... params) {
        String result = "";
        URL url;
        HttpURLConnection urlConnection = null;

        try {
            url = new URL(urls[0]);
            urlConnection = (HttpURLConnection) url.openConnection();
            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();

            }
            if(result.isEmpty()){
            flag=false;
            }else{
            flag=true;
            }   
            return result;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            if(!flag){
                Toast.makeText(getApplicationContext(), "Could not find weather", Toast.LENGTH_LONG).show();
            }

        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }
    }
公共类下载扩展异步任务{ @凌驾 受保护的Void doInBackground(Void…参数){ 字符串结果=”; 网址; HttpURLConnection-urlConnection=null; 试一试{ url=新url(url[0]); urlConnection=(HttpURLConnection)url.openConnection(); InputStream in=urlConnection.getInputStream(); InputStreamReader reader=新的InputStreamReader(in); int data=reader.read(); while(数据!=-1){ 当前字符=(字符)数据; 结果+=电流; data=reader.read(); } if(result.isEmpty()){ flag=false; }否则{ flag=true; } 返回结果; } @凌驾 受保护的void onPostExecute(void结果){ super.onPostExecute(结果); 如果(!标志){ Toast.makeText(getApplicationContext(),“找不到天气”,Toast.LENGTH\u LONG.show(); } } @凌驾 受保护的void onPreExecute(){ super.onPreExecute(); } }
我认为您没有包含足够的崩溃日志。但是根据您的尝试捕获,我认为您无法从doInBackground调用Toast。您还错过了它的
.show()
。您也错过了操作中的
.show()
。这确实应该在
onPostExecute()
中完成。不过应该按照正确的行:)
boolean flag=false; // declare boolean  at the top of the class it's a class variable



public class Download extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... params) {
        String result = "";
        URL url;
        HttpURLConnection urlConnection = null;

        try {
            url = new URL(urls[0]);
            urlConnection = (HttpURLConnection) url.openConnection();
            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();

            }
            if(result.isEmpty()){
            flag=false;
            }else{
            flag=true;
            }   
            return result;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            if(!flag){
                Toast.makeText(getApplicationContext(), "Could not find weather", Toast.LENGTH_LONG).show();
            }

        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }
    }