2016-12-19 3 views
-1

unten ist mein Code mir helfen, diesen Fehler zu entfernen versuchen, eine Wetter App zu bauen helfen Sie mir Freunde, so dass ich diese App als mein Nebenprojekt zeigen kann.kein Fehler in Android Studio, aber wenn ich Drücken Sie meine Taste, es zeigt den folgenden Code.Fehler in Doinbackground in 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); 
     } 


    } 


} 

}

unten fehler Freunde helfen mir

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

Sie greifen auf UI-Thread von Hintergrund Thread (nicht UI-Thread) – Nas

+0

Ahamed..I alle Codes veröffentlicht. –

Antwort

0

Sie Ihre Nachricht nicht von doInBackground() -Methode rösten kann.

versuchen Sie, diese Zeile zu entfernen, und versuchen Sie es dann.

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

und Wenn Sie Nachricht von DoInBackground() -Methode zeigen müssen versuchen, Handler oder Thread zu verwenden.

Aber es ist eine schlechte Praxis, UI-Übergänge von doInBackground() zu versuchen, es von onPostExecute() -Methode zu tun.

+0

Funktioniert immer noch nicht. –

Verwandte Themen