2016-12-19 2 views
-1

ниже - это мой код, помогите мне в удалении этой ошибки, пытаясь создать приложение для погоды, помогите мне с друзьями, чтобы я мог показать это приложение в качестве моей незначительной ошибки project.no в студии Android, но когда я нажмите мою кнопку, чтобы отобразить приведенный ниже код.Получение ошибки в Doinbackground в Android

import android.content.Context; 
import android.os.AsyncTask; 
import android.support.v7.app.AppCompatActivity;`` 
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.jso`enter code here`n.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLEncoder; 

public class MainActivity extends AppCompatActivity { 
EditText cityName; 
TextView resultTextView; 

public void findWeather(View view){ 

Log.i("cityName",cityName.getText().toString()); 

InputMethodManager mgr = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE); 
mgr.hideSoftInputFromWindow(cityName.getWindowToken(),0); 

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

    DownloadTask task = new DownloadTask(); 
    task.execute("http://api.openweathermap.org/data/2.5/weather?q=" + encodedCityName); 

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
     Toast.makeText(getApplicationContext(),"Could Not Find Weather",Toast.LENGTH_SHORT); 
    } 



} 

@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); 


} 

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(); 
      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) { 

      Toast.makeText(getApplicationContext(),"Could Not Find Weather",Toast.LENGTH_SHORT); 
     } 


     return null; 
    } 

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

      String message = ""; 
      JSONObject jsonObject = new JSONObject(result); 
      String weatherInfo= jsonObject.getString("weather"); 
      Log.i("Weather Content",weatherInfo); 
      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 != ""){ 

       message += main + "; " + description + "\r\n"; 
       } 
      } 

      if (message != ""){ 

       resultTextView.setText(message); 

      } else { 

       Toast.makeText(getApplicationContext(),"Could Not Find Weather",Toast.LENGTH_SHORT); 

      } 


     } catch (JSONException e) { 

    Toast.makeText(getApplicationContext(),"Could Not Find Weather",Toast.LENGTH_SHORT); 
     } 


    } 


} 

}

ниже ошибка помочь мне друг

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:345) 
               at android.widget.Toast.<init>(Toast.java:101) 
               at android.widget.Toast.makeText(Toast.java:259) 
               at com.example.shaarif.test3.MainActivity$DownloadTask.doInBackground(MainActivity.java:90) 
               at com.example.shaarif.test3.MainActivity$DownloadTask.doInBackground(MainActivity.java:64) 
               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)  
+0

Вы получаете доступ к потоку пользовательского интерфейса из фоновой нити (non UI thread) – Nas

+0

Ahamed..I выложил все коды. –

ответ

0

Вы не можете тост вашего сообщения от doInBackground() метод.

попытайтесь удалить эту строку, а затем попробуйте.

Toast.makeText(getApplicationContext(),"Could Not Find Weather",Toast.LENGTH_SHORT); 

и если вы должны показать сообщение из метода doInBackground(), попробуйте использовать обработчик или поток.

Но плохой практикой является выполнение переходов пользовательского интерфейса из doInBackground(), чтобы попытаться сделать это из метода onPostExecute().

+0

все еще не работает. –

Смежные вопросы