2014-09-14 3 views
-1

Ошибка возникает, когда она вызывает две функции connecttask и connecttaskproperty. Если вы только вызываете connecttask, он работает. Может ли кто-нибудь помочь?AsyncTask и RuntimeException в doInBackground

частный класс DelayedTask расширяет TimerTask {

@Override 
    public void run() { 
     String url = "..."; 
     Log.i("Tag","Timer Task executing"); 

     // code for updating sqlite database 
     try { 

      int k = db.getReportsCount(); 
      Log.d("send0","getReports"); 
      for(int i = 1; i < k+1; i++){ 
       Log.d("send2","getReports"); 
       Report report = new Report(); 
       report = db.getReport(i); 
       Log.d("send1","getReport"); 
       int posted; 
       posted = report.getPosted(); 
       Log.d("send", String.valueOf(posted)); 
       if(posted == 0){ 
        // asynTaskParam = new AsyncTaskParam(report, url); 
        //asynTaskParam 
        Map<Integer, Report> hashmap = new HashMap<Integer, Report>(); 

        hashmap.put(i, report); 
        new ConnectTask().execute(hashmap); 
        Log.d("send", String.valueOf(hashmap)); 
        // new ConnectTaskProperty().execute(hashmap); 
        // Log.d("send", "property"); 
       /* new ConnectTaskRental().execute(hashmap); 
        Log.d("send", "rental"); 
        new ConnectTaskCar().execute(hashmap); 
        Log.d("send", "car"); 
        new ConnectTaskOtherAsset().execute(hashmap); 
        Log.d("send", "Oa"); 
        new ConnectTaskBussinessAsset().execute(hashmap); 
        Log.d("send", "Business Asset"); 
        new ConnectTaskDebt().execute(hashmap); 
        Log.d("send", "Debt");*/ 

        db.getIdPosted(i); 
        Log.d("Odebrałem", "czy zmieniono"); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     Log.d("select", "test"); 
    } 
} 



    private class ConnectTask extends AsyncTask</*AsyncTaskParam*/Map<Integer, Report>, Void, String> { 

частный класс ConnectTask расширяет AsyncTask, Пустота, String> {

@Override 
    protected String doInBackground(Map<Integer,Report>/*AsyncTaskParam*/... params) { 
     Map<Integer,Report> localHashmap = params[0]; 


     String result; 
     checkConnectivity(context); 
     result = doPost(localHashmap); 
     return result; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     if (result != null) { 
      Toast.makeText(ReportMainScreen.this, "Información recuperada: [" + result + "]", 
        Toast.LENGTH_LONG).show(); 
     } else { 
      Toast.makeText(ReportMainScreen.this, "Error al tratar de conectar con el servidor.", 
        Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

public String doPost(Map<Integer,Report> localHashmap) { 
    // HttpParams httpParameters = new BasicHttpParams(); 
    // Se ponen 3 segundos de timeout. 
    // HttpConnectionParams.setConnectionTimeout(httpParameters, 30000); 
    // localHashmap.get(1); 
    // for(int i = 0; i < localHashmap.size()+1;i++) 
    // { 
    Integer reportId = null; 
    Report reportRecord = null; 

    Iterator it = localHashmap.entrySet().iterator(); 
    while (it.hasNext()) { 
     Map.Entry pairs = (Map.Entry)it.next(); 
     reportId = (Integer) pairs.getKey(); 
     reportRecord = (Report) pairs.getValue(); 

     // System.out.println(pairs.getKey() + " = " + pairs.getValue()); 
     it.remove(); // avoids a ConcurrentModificationException 
    } 
    //} 
    Integer EncounterId = reportRecord.getEncounter_id(); 
    Encounter encounterLocal = db.getEncounter(EncounterId); 


    Integer ReportId = reportRecord.getId(); 
    Personal personalLocal = db.getPersonal(ReportId); 
    String url = "..."; 

    HttpClient client = new DefaultHttpClient(/*httpParameters*/); 
    HttpPost httpPost = new HttpPost(url); 

    try { 

     // Build the JSON object to pass parameters 
     JSONObject jsonObj = new JSONObject(); 
     jsonObj.put("key1", reportRecord.getEncounter_id()); 
     jsonObj.put("key2", encounterLocal.getEncounterFee()); 
     jsonObj.put("key3", encounterLocal.getEncounterTax()); 
     jsonObj.put("key4", encounterLocal.getEncounterSettlement()); 
     jsonObj.put("key5", encounterLocal.getEncounterMetWith()); 
     jsonObj.put("key6", encounterLocal.getEncounterProxy()); 
     jsonObj.put("key7", reportRecord.getTax_excess()); 
     jsonObj.put("key8", reportRecord.getOutlays()); 
     jsonObj.put("key9", personalLocal.getReg_number()); 
     jsonObj.put("key10", personalLocal.getTelephone()); 
     jsonObj.put("key11", personalLocal.getMartial_status()); 
     jsonObj.put("key12", personalLocal.getChildren()); 
     jsonObj.put("key13", personalLocal.getOccupation()); 
     jsonObj.put("key14", personalLocal.getIncome()); 
     jsonObj.put("key15", personalLocal.getSpouse_income()); 
     jsonObj.put("key16", personalLocal.getDisposable_income()); 
     jsonObj.put("key17", reportRecord.getInstallments()); 
     DateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US); 
     Log.d("test", String.valueOf(reportRecord.getInstallments_from())); 
     Date convertedDate = (Date) dateFormat.parse(String.valueOf(reportRecord.getInstallments_from())); 
     Log.d("testx2","testx2"); 
     SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy 'kl.-'HH:mm"); 
     String strDate = sdf.format(convertedDate); 
     jsonObj.put("key18", strDate); 
     jsonObj.put("key19", reportRecord.getInsolvency()); 
     jsonObj.put("key20", reportRecord.getCredibility()); 
     jsonObj.put("key21", encounterLocal.getEncounterEncounterNotes()); 
     // Create the POST object and add the parameters 
     StringEntity entity = new StringEntity(jsonObj.toString(), HTTP.UTF_8); 
     entity.setContentType("application/json"); 
     httpPost.setEntity(entity); 
     HttpResponse response = client.execute(httpPost); 
     return convertHttpResponseToString(response); 
    } catch (Exception e) { 
     Log.e("HTTP", "Error in http connection " + e.toString()); 
     return null; 

    } 
} 

private class ConnectTaskProperty extends AsyncTask<Map<Integer, Report>, Void, String> { 
    // public AsyncTaskParam asyncTaskParam; 
    @Override 
    protected String doInBackground(Map<Integer,Report>... params) { 
     Map<Integer,Report> localHashmap = params[0]; 

     String result; 
     checkConnectivity(context); 
     result = doPostProperty(localHashmap); 
     return result; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     if (result != null) { 
      Toast.makeText(ReportMainScreen.this, "Información recuperada: [" + result + "]", 
        Toast.LENGTH_LONG).show(); 
     } else { 
      Toast.makeText(ReportMainScreen.this, "Error al tratar de conectar con el servidor.", 
        Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

public String doPostProperty(Map<Integer,Report> localHashmap) { 

    Log.d("test"," test property"); 
    Integer reportId = null; 
    Report reportRecord = null; 

    Iterator it = localHashmap.entrySet().iterator(); 
    while (it.hasNext()) { 
     Map.Entry pairs = (Map.Entry)it.next(); 
     reportId = (Integer) pairs.getKey(); 
     reportRecord = (Report) pairs.getValue(); 
     Log.d("reportRecord", String.valueOf(reportRecord.getId())); 
     it.remove(); 
    } 

    String url = "..."; 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(url); 

    Log.d("reportid", String.valueOf(reportId)); 
    Integer ReportId = reportRecord.getId(); 
    int k = db.getPropertyCount(); 
    for(int i = 1; i < k+1; i++) { 
     Property propertyLocal = new Property(); 
     try { 
      propertyLocal = db.getProperty(i); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     int report_id; 
     report_id = propertyLocal.getReport_id(); 
     if (report_id == ReportId) { 
      int posted; 

      posted = propertyLocal.getPosted(); 
      Log.d("posted", String.valueOf(posted)); 
      if (posted == 0) { 
       Log.d("test","getposted property"); 
       try { 
        // Build the JSON object to pass parameters 
        JSONObject jsonObj = new JSONObject(); 
        jsonObj.put("key1", propertyLocal.getAddress()); 
        jsonObj.put("key2", propertyLocal.getValue()); 
        jsonObj.put("key3", propertyLocal.getDebt()); 
        jsonObj.put("key4", propertyLocal.getNotes()); 
        jsonObj.put("key5", propertyLocal.getReport_id()); 
        StringEntity entity = new StringEntity(jsonObj.toString(), HTTP.UTF_8); 
        entity.setContentType("application/json"); 
        httpPost.setEntity(entity); 
        HttpResponse response = client.execute(httpPost); 
        return convertHttpResponseToString(response); 
       } catch (Exception e) { 
        Log.e("HTTP", "Error in http connection " + e.toString()); 
        return null; 
       } 
      } 
     } 
    } 
    return null; 
} 

и журнал ошибок

FATAL EXCEPTION: AsyncTask #4 
    java.lang.RuntimeException: An error occured while executing doInBackground() 
      at android.os.AsyncTask$3.done(AsyncTask.java:299) 
      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
      at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
      at java.lang.Thread.run(Thread.java:838) 
    Caused by: java.lang.NullPointerException 
      at .app.view.ReportMainScreen.doPostProperty(ReportMainScreen.java:538) 
      at .app.view.ReportMainScreen$ConnectTaskProperty.doInBackground(ReportMainScreen.java:502) 
      at app.view.ReportMainScreen$ConnectTaskProperty.doInBackground(ReportMainScreen.java:494) 
      at android.os.AsyncTask$2.call(AsyncTask.java:287) 
+0

Где вы звоните - последний? – Nabin

+0

Что такое строка '538'' ReportMainScreen'? 'localHashmap' не' null', можете ли вы проверить Log или debug? – Wakim

+0

Итератор it = localHashmap.entrySet(). Iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry) it.next(); reportId = (Integer) pairs.getKey(); reportRecord = (Report) pairs.getValue(); Log.d ("reportRecord", String.valueOf (reportRecord.getId())); it.remove(); } – Danio9004

ответ

0
doPostProperty(Map<Integer,Report> localHashmap){ 

    String url = "..."; 
} 

, если вы передаете неверное значение URL-адреса, как вы получите результат?

+0

У меня есть правильный URL, не введенный здесь – Danio9004

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