2012-06-07 41 views
1

我目前正在開發一個應用程序,用戶可以將日誌發佈到項目中。但是,似乎我遇到了問題,似乎無法找到答案。用戶發佈帖子後,後退按鈕不會關閉日誌活動。相反,它會使應用程序無響應;來自這種實例的logcat位於底部。然而,點擊「等待」而不是「強制關閉」會恢復應用程序,但後退按鈕仍然不起作用。以下是活動的佈局。 viewflipper中的每個視圖都是具有多個edittext的項目的不同日誌,以填充信息和一個按鈕以發佈到日誌。最初,這是在列表視圖中顯示當前帖子在帖子按鈕下方顯示的位置。此時,後退按鈕具有全部功能。但是,scrollview中的listview效果不佳,因此必須將其更改爲帶有listview的滑動drawer,每次用戶在日誌之間翻轉時,其適配器都會更改。這是後退按鈕功能丟失的地方。起初我以爲我在我的onKeyDown方法中做了一些錯誤,但在嘗試調試它之後,修改它,甚至刪除它,我發現它永遠不會被調用。因爲這是在我換成滑動抽屜後開始發生的,我的結論是它與滑動抽屜有關。任何幫助,將不勝感激。爲什麼android按鈕會凍結我的應用程序而無法運行?

編輯:經過徹底的探索這個問題,我發現它不只是後退按鈕,這樣做。設置按鈕和搜索按鈕也都表現出這種行爲。顯示正確功能的唯一按鈕是主頁按鈕。但是,活動內的功能不受影響。我仍然可以發佈,在視圖之間翻轉,並查看和編輯帖子。

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/iphonebg" > 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0" 
     android:background="@drawable/toolbar_gradient" 
     android:gravity="center_vertical" > 

     <!-- Header --> 
    </TableRow> 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0" > 

     <!-- Date --> 
    </TableRow> 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0" > 

     <!-- Tabs --> 
    </TableRow> 

    <FrameLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_gravity="center" > 

     <TableLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="@drawable/iphonebg" > 

      <TableRow 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" > 

       <ViewFlipper 
        android:id="@+id/ViewFlipper01" 
        android:layout_width="0dip" 
        android:layout_height="fill_parent" 
        android:layout_weight="2" > 

        <!-- adding views to ViewFlipper --> 
        <!-- ScrollView 1 --> 
        <!-- ScrollView 2 --> 
        <!-- ScrollView 3 --> 
        <!-- ScrollView 4 --> 
        <!-- ScrollView 5 --> 
       </ViewFlipper> 
      </TableRow> 
     </TableLayout> 

     <SlidingDrawer 
      android:id="@+id/drawer" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:content="@+id/anyPosts" 
      android:handle="@+id/handle" > 

      <Button 
       android:id="@+id/handle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:minHeight="35dip" 
       android:background="@drawable/black_btn_bg" 
       android:text="Drag or Tap to View Posts" 
       android:textColor="#FFFFFF" 
       android:textStyle="bold" /> 

      <ListView 
       android:id="@+id/anyPosts" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:paddingLeft="5dip" 
       android:paddingRight="5dip" > 
      </ListView> 
     </SlidingDrawer> 
    </FrameLayout> 

</TableLayout> 

代碼處理該滑動抽屜,位於我的onCreate方法的程度:

 final SlidingDrawer slide = (SlidingDrawer) findViewById(R.id.drawer); 
     final Button btnDownloads = (Button) findViewById(R.id.handle); 
     slide.setOnDrawerOpenListener(new OnDrawerOpenListener() { 

      @Override 
      public void onDrawerOpened() { 
       btnDownloads.setText("Drag or Tap to Close Posts"); 
      } 
     }); 

     slide.setOnDrawerCloseListener(new OnDrawerCloseListener() { 

      @Override 
      public void onDrawerClosed() { 
       btnDownloads.setText("Drag or Tap to View Posts"); 
      } 
     }); 
     slide.animateOpen(); 

處理列表視圖的代碼的程度:

ListView listToFill = (ListView) findViewById(R.id.anyPosts); 
    listToFill.setAdapter(listViewAdapter); 

logcat的:

06-07 13:51:44.394: I/InputDispatcher(1464): Application is not responding: AppWindowToken{40cd7758 token=HistoryRecord{40534788 uda.projectlogging/.Radio_Group}} - Window{40ae0a88 uda.projectlogging/uda.projectlogging.Radio_Group paused=false}. 10009.8ms since event, 10009.4ms since wait started 
06-07 13:51:44.394: I/WindowManager(1464): Input event dispatching timed out sending to uda.projectlogging/uda.projectlogging.Radio_Group 
06-07 13:51:44.444: I/Process(1464): Sending signal. PID: 23939 SIG: 3 
06-07 13:51:44.444: I/dalvikvm(23939): threadid=4: reacting to signal 3 
06-07 13:51:44.444: I/dalvikvm(23939): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.444: I/Process(1464): Sending signal. PID: 1464 SIG: 3 
06-07 13:51:44.444: I/dalvikvm(1464): threadid=4: reacting to signal 3 
06-07 13:51:44.484: I/dalvikvm(1464): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.484: I/Process(1464): Sending signal. PID: 1690 SIG: 3 
06-07 13:51:44.484: I/dalvikvm(1690): threadid=4: reacting to signal 3 
06-07 13:51:44.484: I/dalvikvm(1690): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.484: I/Process(1464): Sending signal. PID: 1639 SIG: 3 
06-07 13:51:44.484: I/dalvikvm(1639): threadid=4: reacting to signal 3 
06-07 13:51:44.494: I/dalvikvm(1639): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.494: I/Process(1464): Sending signal. PID: 1689 SIG: 3 
06-07 13:51:44.494: I/dalvikvm(1689): threadid=4: reacting to signal 3 
06-07 13:51:44.494: I/dalvikvm(1689): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.494: I/Process(1464): Sending signal. PID: 1672 SIG: 3 
06-07 13:51:44.494: I/dalvikvm(1672): threadid=4: reacting to signal 3 
06-07 13:51:44.494: I/dalvikvm(1672): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.494: I/Process(1464): Sending signal. PID: 1656 SIG: 3 
06-07 13:51:44.494: I/dalvikvm(1656): threadid=4: reacting to signal 3 
06-07 13:51:44.504: I/dalvikvm(1656): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.504: I/Process(1464): Sending signal. PID: 1652 SIG: 3 
06-07 13:51:44.504: I/dalvikvm(1652): threadid=4: reacting to signal 3 
06-07 13:51:44.514: I/dalvikvm(1652): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.514: I/Process(1464): Sending signal. PID: 1642 SIG: 3 
06-07 13:51:44.514: I/dalvikvm(1642): threadid=4: reacting to signal 3 
06-07 13:51:44.514: I/dalvikvm(1642): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.514: I/Process(1464): Sending signal. PID: 1664 SIG: 3 
06-07 13:51:44.514: I/dalvikvm(1664): threadid=4: reacting to signal 3 
06-07 13:51:44.514: I/dalvikvm(1664): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.514: I/Process(1464): Sending signal. PID: 1675 SIG: 3 
06-07 13:51:44.514: I/dalvikvm(1675): threadid=4: reacting to signal 3 
06-07 13:51:44.514: I/dalvikvm(1675): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.514: I/Process(1464): Sending signal. PID: 1691 SIG: 3 
06-07 13:51:44.514: I/dalvikvm(1691): threadid=4: reacting to signal 3 
06-07 13:51:44.514: I/dalvikvm(1691): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.514: I/Process(1464): Sending signal. PID: 1590 SIG: 3 
06-07 13:51:44.514: I/dalvikvm(1590): threadid=4: reacting to signal 3 
06-07 13:51:44.524: I/dalvikvm(1590): Wrote stack traces to '/data/anr/traces.txt' 
06-07 13:51:44.734: D/dalvikvm(1464): GC_CONCURRENT freed 1754K, 33% free 9128K/13511K, external 6035K/6964K, paused 2ms+6ms 
06-07 13:51:44.814: D/dalvikvm(1464): GC_EXPLICIT freed 31K, 33% free 9107K/13511K, external 6035K/6964K, paused 71ms 
06-07 13:51:44.914: E/NetlinkEvent(1351): NetlinkEvent::FindParam(): Parameter 'UDEV_LOG' not found 
06-07 13:51:45.364: E/ActivityManager(1464): ANR in uda.projectlogging, pid 23939 (uda.projectlogging/.Radio_Group) 
06-07 13:51:45.364: E/ActivityManager(1464): Reason: keyDispatchingTimedOut 
06-07 13:51:45.364: E/ActivityManager(1464): Load: 0.26/0.25/0.21 
06-07 13:51:45.364: E/ActivityManager(1464): CPU usage from 7340ms to 0ms ago with 99% awake: 
06-07 13:51:45.364: E/ActivityManager(1464): 0.9% 783/als_wq: 0% user + 0.9% kernel 
06-07 13:51:45.364: E/ActivityManager(1464): 0.8% 1464/system_server: 0.1% user + 0.6% kernel/faults: 1 minor 
06-07 13:51:45.364: E/ActivityManager(1464):  0.5% 1489/ActivityManager: 0.1% user + 0.4% kernel 
06-07 13:51:45.364: E/ActivityManager(1464):  0.2% 1543/InputDispatcher: 0% user + 0.2% kernel 
06-07 13:51:45.364: E/ActivityManager(1464):  0.1% 1539/PowerManagerSer: 0% user + 0.1% kernel 
06-07 13:51:45.364: E/ActivityManager(1464): 0% 19639/com.svox.pico: 0% user + 0% kernel/faults: 56 minor 
06-07 13:51:45.364: E/ActivityManager(1464):  0% 19639/com.svox.pico: 0% user + 0% kernel 
06-07 13:51:45.364: E/ActivityManager(1464): 0.4% 288/tegra_spi.1: 0% user + 0.4% kernel 
06-07 13:51:45.364: E/ActivityManager(1464): 0.4% 19564/com.android.vending: 0.2% user + 0.1% kernel 
06-07 13:51:45.364: E/ActivityManager(1464):  0.2% 19566/HeapWorker: 0.1% user + 0.1% kernel 
06-07 13:51:45.364: E/ActivityManager(1464): 0% 1358/battd: 0% user + 0% kernel 
06-07 13:51:45.364: E/ActivityManager(1464): 0.1% 21254/com.motorola.android.datamanager: 0.1% user + 0% kernel 
06-07 13:51:45.364: E/ActivityManager(1464):  0.1% 21255/HeapWorker: 0.1% user + 0% kernel 
06-07 13:51:45.364: E/ActivityManager(1464): 7.9% TOTAL: 1.3% user + 2% kernel + 0.1% iowait + 4.3% softirq 
06-07 13:51:45.364: E/ActivityManager(1464): CPU usage from 420ms to 934ms later with 99% awake: 
06-07 13:51:45.364: E/ActivityManager(1464): 7.6% 1464/system_server: 1.9% user + 5.7% kernel/faults: 1 minor 
06-07 13:51:45.364: E/ActivityManager(1464):  3.8% 1543/InputDispatcher: 0% user + 3.8% kernel 
06-07 13:51:45.364: E/ActivityManager(1464): 3.9% TOTAL: 1.9% user + 1.9% kernel 

當後按鈕被點擊:

postButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       v.startAnimation(AnimationUtils.loadAnimation(
         getApplicationContext(), R.anim.image_click)); 
       data = new JSONObject(); 
       if (description.equals("")) { 
        runOnUiThread(new Runnable() { 
         public void run() { 
          Toast.makeText(getApplicationContext(), 
            "Please Enter a Description", 
            Toast.LENGTH_LONG).show(); 
         } 
        }); 
       } else if (delayStart == null) { 
        runOnUiThread(new Runnable() { 
         public void run() { 
          Toast.makeText(getApplicationContext(), 
            "Please Set Delay Duration", 
            Toast.LENGTH_LONG).show(); 
         } 
        }); 
       } else { 
        try { 
         data.put("COMMENT", description); 
         data.put("DELAYSTART", 
           delayStart.get(Calendar.HOUR_OF_DAY) + ":" 
             + delayStart.get(Calendar.MINUTE)); 
         data.put("DELAYEND", delayEnd.get(Calendar.HOUR_OF_DAY) 
           + ":" + delayEnd.get(Calendar.MINUTE)); 
         postEntry(); 
         description = ""; 
         delayHours = 0; 
         delayMinutes = 0; 
         delayStart = null; 
         delayEnd = null; 
         delay.setText(""); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }); 

發表記錄:

public void postEntry() { 
    final ProgressDialog dialog1 = new ProgressDialog(this); 
    dialog1.setCancelable(true); 
    dialog1.setMessage("Loading..."); 

    dialog1.show(); 

    final Thread background1 = new Thread(new Runnable() { 
     public void run() { 
      Looper.prepare(); 
      try { 
       String type1 = "0"; 
       switch (current) { 
       case 0: 
        type1 = "1"; 
        break; 
       case 1: 
        type1 = "4"; 
        break; 
       case 2: 
        type1 = "3"; 
        break; 
       case 3: 
        type1 = "6"; 
        break; 
       case 4: 
        type1 = "5"; 
        break; 
       } 
       if (helperMethods.isOnline(currentActivity)) { 
        if (failedUploads) 
         doFailedUploads(); 
        SoapObject request = new SoapObject(
          "http://www.constructiononline.com/service/", 
          "OSLPost"); 
        PropertyInfo num1 = new PropertyInfo(); 
        num1.setName("userEmail"); 
        num1.setValue(settings.getString("EMAIL", "")); 
        request.addProperty(num1); 

        num1 = new PropertyInfo(); 
        num1.setName("prj_id"); 
        num1.setValue(projectInfo.getID()); 
        request.addProperty(num1); 

        num1 = new PropertyInfo(); 
        num1.setName("entryDate"); 
        num1.setValue(month + "/" + day + "/" + year); 
        request.addProperty(num1); 

        num1 = new PropertyInfo(); 
        num1.setName("type"); 
        num1.setValue(type1); 
        request.addProperty(num1); 

        num1 = new PropertyInfo(); 
        num1.setName("data"); 
        num1.setValue(data.toString()); 
        request.addProperty(num1); 

        num1 = new PropertyInfo(); 
        num1.setName("delete"); 
        num1.setValue("false"); 
        request.addProperty(num1); 

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
          SoapEnvelope.VER11); 
        envelope.dotNet = true; 
        envelope.setOutputSoapObject(request); 
        HttpTransportSE androidHttpTransport = new HttpTransportSE(
          URL); 

        androidHttpTransport 
          .call("http://www.constructiononline.com/service/OSLPost", 
            envelope); 

        Log.e("Response from Post", envelope.getResponse() 
          .toString()); 

        updatePostList(false); 
       } else { 
        addFailedUploads(settings.getString("EMAIL", ""), 
          projectInfo.getID(), month + "/" + day + "/" 
            + year, type1, data.toString()); 
        JSONObject j = new JSONObject(); 
        j.put("LOG_OBJECT", data); 
        j.put("TYPE", type1); 
        j.put("DATE", month + "/" + day + "/" + year); 
        Calendar c = Calendar.getInstance(); 
        String created = c.get(Calendar.MONTH) + "/" 
          + c.get(Calendar.DAY_OF_MONTH) + "/" 
          + c.get(Calendar.YEAR) + " " 
          + c.get(Calendar.HOUR) + ":" 
          + c.get(Calendar.MINUTE) + ":" 
          + c.get(Calendar.SECOND) + " " 
          + (c.get(Calendar.AM_PM) == 0 ? "AM" : "PM"); 
        j.put("CREATED", created); 
        JSONObject creatorTemp = new JSONObject(); 
        creatorTemp.put("ID", "0"); 
        creatorTemp.put("NAME", " "); 
        creatorTemp.put("COMPANY", " "); 
        creatorTemp.put("ICON", "NULL"); 
        j.put("CREATOR", creatorTemp); 
        j.put("ID", "0"); 
        switch (current) { 
        case 0: 
         weatherEntries.put(j); 
         break; 
        case 1: 
         workEntries.put(j); 
         break; 
        case 2: 
         visitorEntries.put(j); 
         break; 
        case 3: 
         deliveryEntries.put(j); 
         break; 
        case 4: 
         noteEntries.put(j); 
         break; 
        } 
       } 
       if (dialog1 != null && dialog1.isShowing()) { 
        dialog1.dismiss(); 
       } 

      } catch (final Exception e) { 
       e.printStackTrace(); 
       StringWriter sw = new StringWriter(); 
       e.printStackTrace(new PrintWriter(sw)); 
       String stacktrace = sw.toString(); 

       addOnlineErrorLogEntry(e.getMessage(), stacktrace); 
       if (dialog1 != null && dialog1.isShowing()) { 
        dialog1.dismiss(); 
       } 
       runOnUiThread(new Runnable() { 
        public void run() { 
         Toast.makeText(getApplicationContext(), 
           e.getMessage() + " in setupProjects", 
           Toast.LENGTH_LONG).show(); 

        } 
       }); 

      } 

     } 
    }); 

    // start the background thread 
    background1.start(); 
} 

更新帖子列表:

private void updatePostList(final boolean getAll) { 
    if (!helperMethods.isOnline(currentActivity)) { 
     return; 
    } 

    final ProgressDialog dialog1 = new ProgressDialog(this); 
    dialog1.setCancelable(true); 
    dialog1.setMessage("Loading..."); 

    dialog1.show(); 

    final Thread background1 = new Thread(new Runnable() { 
     public void run() { 
      Looper.prepare(); 
      try { 
       if (failedUploads) 
        doFailedUploads(); 
       SoapObject request = new SoapObject(
         "http://www.constructiononline.com/service/", 
         "OSLGet"); 
       PropertyInfo num1 = new PropertyInfo(); 
       num1.setName("userEmail"); 
       num1.setValue(settings.getString("EMAIL", "")); 
       request.addProperty(num1); 

       num1 = new PropertyInfo(); 
       num1.setName("prj_id"); 
       num1.setValue(projectInfo.getID()); 
       request.addProperty(num1); 

       num1 = new PropertyInfo(); 
       num1.setName("startDate"); 
       num1.setValue(""); 
       if (!getAll) { 
        num1.setValue(month + "/" + day + "/" + year); 
       } 
       request.addProperty(num1); 

       num1 = new PropertyInfo(); 
       num1.setName("endDate"); 
       num1.setValue(""); 
       request.addProperty(num1); 

       num1 = new PropertyInfo(); 
       num1.setName("type"); 
       num1.setValue(""); 
       if (!getAll) { 
        switch (current) { 
        case 0: 
         num1.setValue("1"); 
         break; 
        case 1: 
         num1.setValue("4"); 
         break; 
        case 2: 
         num1.setValue("3"); 
         break; 
        case 3: 
         num1.setValue("6"); 
         break; 
        case 4: 
         num1.setValue("5"); 
         break; 
        } 
       } 
       request.addProperty(num1); 

       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
         SoapEnvelope.VER11); 
       envelope.dotNet = true; 
       envelope.setOutputSoapObject(request); 
       HttpTransportSE androidHttpTransport = new HttpTransportSE(
         URL); 

       androidHttpTransport.call(
         "http://www.constructiononline.com/service/OSLGet", 
         envelope); 

       Log.e("response", envelope.getResponse().toString()); 
       JSONObject temp = new JSONObject(envelope.getResponse() 
         .toString()); 
       JSONArray entries = temp.getJSONArray("ENTRIES"); 
       if (getAll) { 
        weatherEntries = new JSONArray(); 
        workEntries = new JSONArray(); 
        visitorEntries = new JSONArray(); 
        deliveryEntries = new JSONArray(); 
        noteEntries = new JSONArray(); 
       } 
       switch (current) { 
       case 0: 
        weatherEntries = new JSONArray(); 
        break; 
       case 1: 
        workEntries = new JSONArray(); 
        break; 
       case 2: 
        visitorEntries = new JSONArray(); 
        break; 
       case 3: 
        deliveryEntries = new JSONArray(); 
        break; 
       case 4: 
        noteEntries = new JSONArray(); 
        break; 
       } 

       for (int x = 0; x < entries.length(); x++) { 
        switch (entries.getJSONObject(x).getInt("TYPE")) { 
        case 1: 
         weatherEntries.put(entries.getJSONObject(x)); 
         break; 
        case 3: 
         visitorEntries.put(entries.getJSONObject(x)); 
         break; 
        case 4: 
         workEntries.put(entries.getJSONObject(x)); 
         break; 
        case 5: 
         noteEntries.put(entries.getJSONObject(x)); 
         break; 
        case 6: 
         deliveryEntries.put(entries.getJSONObject(x)); 
         break; 
        } 
       } 
       runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         if (getAll) { 
          setupWeatherLog(); 
         } else { 
          getPosts(); 
         } 
        } 

       }); 
       if (dialog1 != null && dialog1.isShowing()) { 
        dialog1.dismiss(); 
       } 

      } catch (final Exception e) { 
       e.printStackTrace(); 
       StringWriter sw = new StringWriter(); 
       e.printStackTrace(new PrintWriter(sw)); 
       String stacktrace = sw.toString(); 

       addOnlineErrorLogEntry(e.getMessage(), stacktrace); 
       if (dialog1 != null && dialog1.isShowing()) { 
        dialog1.dismiss(); 
       } 
       runOnUiThread(new Runnable() { 
        public void run() { 
         Toast.makeText(getApplicationContext(), 
           e.getMessage() + " in setupProjects", 
           Toast.LENGTH_LONG).show(); 

        } 
       }); 

      } 

      if (dialog1 != null && dialog1.isShowing()) { 
       dialog1.dismiss(); 
      } 

     } 
    }); 

    // start the background thread 
    background1.start(); 
} 

填充列表視圖:

private void getPosts() { 

    JSONArray entriesToShow = new JSONArray(); 
    JSONArray postsToLoad = null; 
    switch (current) { 
    case 0: 
     postsToLoad = weatherEntries; 
     break; 
    case 1: 
     postsToLoad = workEntries; 
     break; 
    case 2: 
     postsToLoad = visitorEntries; 
     break; 
    case 3: 
     postsToLoad = deliveryEntries; 
     break; 
    case 4: 
     postsToLoad = noteEntries; 
     break; 
    } 

    for (int i = 0; i < postsToLoad.length(); i++) { 
     try { 
      JSONObject temp = postsToLoad.getJSONObject(i); 
      String[] tempDay = temp.getString("DATE").split("/"); 
      if (Integer.parseInt(tempDay[0]) == month 
        && Integer.parseInt(tempDay[1]) == day 
        && Integer.parseInt(tempDay[2]) == year) { 
       entriesToShow.put(temp); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

    } 

    BaseAdapter listViewAdapter; 
    switch (current) { 
    case 0: 
     listViewAdapter = new WeatherDeliveryVisitLazyAdapter(
       currentActivity, entriesToShow, current); 
     break; 
    case 1: 
     listViewAdapter = new WorkLogPostLazyAdapter(currentActivity, 
       entriesToShow); 
     break; 
    case 2: 
     listViewAdapter = new WeatherDeliveryVisitLazyAdapter(
       currentActivity, entriesToShow, current); 
     break; 
    case 3: 
     listViewAdapter = new WeatherDeliveryVisitLazyAdapter(
       currentActivity, entriesToShow, current); 
     break; 
    case 4: 
     listViewAdapter = new ProjectNotePostLazyAdapter(currentActivity, 
       entriesToShow); 
     break; 
    default: 
     listViewAdapter = new ProjectNotePostLazyAdapter(currentActivity, 
       entriesToShow); 
    } 

    if (listViewAdapter == null || listViewAdapter.getCount() == 0) { 
     runOnUiThread(new Runnable() { 
      public void run() { 
       Toast.makeText(getApplicationContext(), 
         "No Posts to Display", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
    ListView listToFill = (ListView) findViewById(R.id.anyPosts); 
    listToFill.setAdapter(listViewAdapter); 

} 

那是它所做的一切在任何日誌中點擊發布按鈕。如果我已經正確解釋了這一點,當所有的進度對話框都清除了屏幕後,後臺線程就結束了,唯一在UI線程上運行的,除了吐司之外的錯誤或不完整的信息,正在設置listview,它會完成。當我拉開抽屜時,它會顯示正確的帖子列表。

編輯我發現如果我在updatePostList方法中註釋掉進度對話框,它就可以正常工作。這是一個新問題:爲什麼世界上就是解決方案?

最終編輯我想通了。該進程對話框正從後臺線程啓動。修改postEntry方法,以便在UI線程上調用updatePostList,以便在UI線程上創建進度對話框,並且它可以工作。好極了。

回答

1

從您的描述中可以看出,您可能正在從主線程開始一些長時間運行的過程。執行寫入文件,更新數據庫或在主線程上執行網絡I/O等操作會導致它無響應。執行此類操作時,您應該使用ServiceAsyncTask

這裏有一些文章,可能對你有用:

+0

我一直在尋找到這一點,但問題是,我有一個冗長的任務,得到了來自服務器的項目日誌條目,在後臺線程中處理,並在我點擊後退按鈕之前完成。在單擊後退按鈕之前,我沒有任何在UI線程上運行的任務(我知道)。 – skUDA

+0

你能發表更多的代碼嗎? – twaddington

+0

我已經發布了一些在單擊發布按鈕時執行的內容。 – skUDA

相關問題