2013-08-28 2 views
1

Я немного нового подключения к Интернету из своих приложений, поэтому я получил эту ошибку, и мои коды здесь.Android AsyncTask получение ошибки

 
08-28 14:43:29.705: E/AndroidRuntime(17341): FATAL EXCEPTION: AsyncTask #1 
08-28 14:43:29.705: E/AndroidRuntime(17341): java.lang.RuntimeException: An error occured while executing doInBackground() 
08-28 14:43:29.705: E/AndroidRuntime(17341): at android.os.AsyncTask$3.done(AsyncTask.java:200) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at java.lang.Thread.run(Thread.java:1019) 
08-28 14:43:29.705: E/AndroidRuntime(17341): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
08-28 14:43:29.705: E/AndroidRuntime(17341): at android.os.Handler.(Handler.java:121) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at android.app.Dialog.(Dialog.java:101) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at android.app.AlertDialog.(AlertDialog.java:63) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at android.app.AlertDialog.(AlertDialog.java:59) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at android.app.AlertDialog$Builder.create(AlertDialog.java:807) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at android.app.AlertDialog$Builder.show(AlertDialog.java:822) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at com.makkuzu.gps.tracker.Main.UyariPencerem(Main.java:129) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at com.makkuzu.gps.tracker.Main.access$2(Main.java:124) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at com.makkuzu.gps.tracker.Main$SaveDataTask.doInBackground(Main.java:108) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at com.makkuzu.gps.tracker.Main$SaveDataTask.doInBackground(Main.java:1) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at android.os.AsyncTask$2.call(AsyncTask.java:185) 
08-28 14:43:29.705: E/AndroidRuntime(17341): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
08-28 14:43:29.705: E/AndroidRuntime(17341): ... 4 more 
 private class SaveDataTask extends AsyncTask<URL, Integer, Long> { 
    protected Long doInBackground(URL... urls) { 
      if(KullaniciKontrol()){ 
         try { 
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm"); 
         String currentDateandTime = sdf.format(new Date()); 
         ArrayList<NameValuePair> nameValPairs = new ArrayList<NameValuePair>(); 
         nameValPairs.add(new BasicNameValuePair("name", userName.getText().toString())); 
         nameValPairs.add(new BasicNameValuePair("pass", passOne.getText().toString())); 

         nameValPairs.add(new BasicNameValuePair("time", currentDateandTime)); 
         HttpClient httpclient = new DefaultHttpClient(); 
         HttpPost httppost = new HttpPost(
           "http://www.mywebsite.com/yeni_kayit.php"); 
         httppost.setEntity(new UrlEncodedFormEntity(nameValPairs)); 
         httpclient.execute(httppost); 

         islemTamam(); 
        } catch (Exception e) { 
         String icerik = "Bilgiler kaydedilemedi, internet bağlantınızın olduıundan emin olunuz."; 
         UyariPencerem("Uyarı! ",icerik); 
        } 

       } 
     return (long) 0; 
    } 

    protected void onProgressUpdate(Integer... progress) { 

    } 

    protected void onPostExecute(Long result) { 

    } 
} 

UyariPencerem

private void UyariPencerem(String baslik, String icerik){ 
    Builder uyariPenceresi = new AlertDialog.Builder(this); 
     uyariPenceresi.setTitle(baslik); 
     uyariPenceresi.setMessage(icerik); 
     uyariPenceresi.setCancelable(true); 
      uyariPenceresi.show(); 
} 

и kullaniciKontrol

private boolean KullaniciKontrol() { 
    // TODO Auto-generated method stub 
// http post 
try { 
    String result = ""; 
    ArrayList<NameValuePair> nameValPairs = new ArrayList<NameValuePair>(); 
    nameValPairs.add(new BasicNameValuePair("name", userName.getText().toString())); 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost(
      "http://mywebsite.com/kullanici_kontrol.php"); 
    httppost.setEntity(new UrlEncodedFormEntity(nameValPairs)); 
    HttpResponse response = httpclient.execute(httppost); 
    HttpEntity entity = response.getEntity(); 
    InputStream is = entity.getContent(); 
    try { 
     BufferedReader reader = new BufferedReader(
       new InputStreamReader(is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     is.close(); 
     result = sb.toString(); 
    } catch (Exception err) { 
    } 
    try { 
     JSONArray jArray = new JSONArray(result); 
     for (int i = 0; i < jArray.length(); i++) { 
      JSONObject json_data = jArray.getJSONObject(i); 
      String icerik = "Böyle bir kullanici zaten mevcut lütfen farklı bir kullanıcı adı deneyin."; 
      UyariPencerem("Uyarı! ", icerik); 
      return false; 
     } 
    } catch (JSONException er_json) { 
    } 
} catch (Exception er) { 
} 
return true; 
} 

и islemTamam код

  private void islemTamam() { 

    Builder uyariPenceresi = new AlertDialog.Builder(this); 
    uyariPenceresi.setTitle("İşlem Tamam! "); 
    uyariPenceresi.setMessage("Bilgiler başarıyla kaydedilmiştir. \nKullanıcı adınız :" + userName.getText().toString() + "\nşifreniz:"+ passOne.getText().toString()+ "\nTelefon konumunuzu öğrenmek için \ntelefonumnerede.makkuzu.com web sitesini ziyaret ediniz. "); 
    uyariPenceresi.setCancelable(true); 
    uyariPenceresi.setPositiveButton("Tamam",new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog,int id) { 
      someData=getSharedPreferences(filename,0); 
      Editor myEditor=someData.edit(); 
      myEditor.putString("name", userName.getText().toString()); 
      myEditor.putBoolean("isFirtsTime", false); 
      myEditor.commit(); 
      startService(new Intent(Main.this, GPSService.class)); 
      Main.this.finish(); 
     } 
     }); 
     uyariPenceresi.show(); 


} 

й анки для вашей помощи ...

+0

что это делает 'UyariPencerem (« Uyarı! », Icerik)'? и это 'KullaniciKontrol()'? разместите коды для них. похоже, что вы обновляете ui из потока. – Raghunandan

+1

Если вы работаете с пользовательским интерфейсом 'doInBackground', тогда введите' runOnUiThread (..) 'из метода doInBackground вашей задачи. Или, если возможно, в' onPostExecute' – CRUSADER

+0

что находится внутри этого 'islemTamam () '? – waqaslam

ответ

0

UyariPencerem("Uyarı! ", icerik) отображает предупреждение. UyariPencerem("Uyarı! ", icerik) называется формой doInbackground

doInbackground invoked на фоне нити. Вы не можете обновить ui от doInbackground.

Результат возврата фонового расчета в doInabckground. Результат вычисления doInbackground является параметром для onPostExecute. На основе результатов обновления в пользовательском интерфейсе onPostExecute

Для получения дополнительной информации ознакомьтесь документацию

http://developer.android.com/reference/android/os/AsyncTask.html

+0

Итак, как я это сделаю? – makkuzu

+0

@makkuzu возвращает результат в 'doInbackground'. получить в 'onPostExecue' и обновить ui – Raghunandan

+0

Хорошо, я получил благодарность – makkuzu

0
Can't create handler inside thread that has not called Looper.prepare() 

Вы вызываете UyariPencerem("Uyarı! ",icerik); в catch block из doInBackGround(), что рабочий поток. Он выполняет операцию пользовательского интерфейса (диалог отображения), и вы делаете это в потоке, отличном от UI. Поэтому я предлагаю вам показать его с помощью

    runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 

          UyariPencerem("Uyarı! ",icerik); 

         } 
        });  
+0

, если asyctask не является внутренним классом класса активности, тогда вам понадобится контекст активности для 'runOnUiThread'. http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable) – Raghunandan

+0

где я должен помещать этот код? Чтобы заставить его работать – makkuzu

+0

@makkuzu - ваша асинтеза - внутренний класс вашего класса активности или это отдельный файл – Raghunandan

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