2014-07-12 2 views
0

사무실 사전 실행에서 AsyncTask를 확장 한 클래스를 생성하고 progressdialog가 표시된 다음 doinbackground로 이동하여 url을 호출하고 JSON 문자열로 변환 한 다음 postexecute 함수를 실행하고 progressdialog를 닫고 al은로드되고 제거 된 후에 모두 있지만 중간에 원이 있고로드라고 표시됩니다. 화상을 참조 ... IMAGE SCREEN 화면을 봐라!로드 후 ProgressDialog 표시 android

private class DownloadJSON extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     // kriranje progressdialog-a 
     mProgressDialog = new ProgressDialog(Info.this.getActivity()); 

     mProgressDialog.setMessage("Učitavanje informacija..."); 
     mProgressDialog.setCancelable(false); 
     mProgressDialog.setIndeterminate(false); 
     mProgressDialog.show(); 
    } 


    @Override 
    protected Void doInBackground(Void... arg0) { 
     // Create an array 
     arraylist = new ArrayList<HashMap<String, String>>(); 
     // Retrieve JSON Objects from the given URL address 
     jsonobject = JSONfunctions 
       .getJSONfromURL("http://77.105.36.203/objects.txt"); 
     try { 
      // Locate the array name in JSON 
      jsonarray = jsonobject.getJSONArray("objects"); 

      for (int i = 0; i < jsonarray.length(); i++) { 
       HashMap<String, String> map = new HashMap<String, String>(); 
       jsonobject = jsonarray.getJSONObject(i); 
       // Retrive JSON Objects 
       map.put("ime", jsonobject.getString("ime")); 
       map.put("adresa", jsonobject.getString("adresa")); 
       map.put("email", jsonobject.getString("email")); 
       map.put("slika", jsonobject.getString("slika")); 
       // Set the JSON Objects into the array 
       arraylist.add(map); 
      } 
     } catch (JSONException e) { 
      Log.e("Greska:", e.getMessage()); 
      e.printStackTrace(); 
      //finish(); 
     } catch (Exception a){ 
      Log.e("errr", "ss"); 
      a.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void args) { 
     listview = (ListView) getView().findViewById(R.id.listview); 
     // Pass the results into ListViewAdapter.java 
     adapter = new ListViewAdapter(Info.this.getActivity(), arraylist); 
     listview.setAdapter(adapter); 
     mProgressDialog.dismiss(); 
    } 

} 
+0

그럼 문제는 onPostExecute()를로드하는 표시기가 있습니까? 질문/문제가 분명하지 않습니다. – cYrixmorten

+0

예, 끝내기 후 끝내기. 진행 상황 표시. 진행 상황 표시 .. – user3833154

+0

게시 한 이미지와 코드에서 메시지 Loading.You가있는 Asynctask 안에 진행 스피너 코드 선언을 보지 못했습니다. XML 레이아웃과 활동을 확인해야합니다. –

답변

0

이 문제는 직접적인 이유가 없습니다.

해결해야 할 몇 가지 사항은 비공개 AsyncTask 클래스 외부에서 필드 변수를 많이 사용하는 것입니다. AsyncTask를 가능한 한 자체 포함 된 것으로 만드는 것이 더 나은 방법이라고 생각합니다.

그럼에도 불구하고 여기에 나와있는 코드는 다소 비슷한 시나리오이며 사용하는 데 문제가 없습니다. 내가 찾은 파일을 onPostExcecute로 전달하는 방법에 주목하자. arraylist와 똑같이하는 것이 더 깔끔할 것이라고 생각한다. 문제와 관련이 있다고 생각하지는 않는다.

private class DownloadUpdate extends AsyncTask<Void, Void, File> { 

    private ProgressDialog working_dialog; 

    @Override protected void onPreExecute() { 
     working_dialog = ProgressDialog.show(context, "", 
       getString(R.string.working_please_wait), true); 
    } 

    @Override protected File doInBackground(Void... param) { 

     String filename = "turios.apk"; 

     HttpURLConnection c = null; 
     try { 
      URL url = new URL(Constants.UPDATE_DOWNLOAD_URL); 
      c = (HttpURLConnection) url.openConnection(); 
      c.setRequestMethod("GET"); 
      c.setDoOutput(true); 
      c.connect(); 
     } catch (IOException e1) { 
      // TODO handle 
     } 

     File myFilesDir = new File(Environment 
       .getExternalStorageDirectory().getAbsolutePath() 
       + "/Download"); 

     File file = new File(myFilesDir, filename); 

     if (file.exists()) { 
      file.delete(); 
     } 

     if ((myFilesDir.mkdirs() || myFilesDir.isDirectory())) { 
      try { 
       InputStream is = c.getInputStream(); 
       FileOutputStream fos = new FileOutputStream(myFilesDir 
         + "/" + filename); 

       byte[] buffer = new byte[1024]; 
       int len1 = 0; 
       while ((len1 = is.read(buffer)) != -1) { 
        fos.write(buffer, 0, len1); 
       } 
       fos.close(); 
       is.close(); 

      } catch (Exception e) { 
       // TODO handle 
      } 

     } 

     return file; 
    } 

    @Override protected void onPostExecute(File file) { 

     String toastMsg = ""; 
     if (file == null) { 
      toastMsg = getString(R.string.could_not_create_or_access_downloadfolder); 
      ; 
     } else if (file.exists()) { 
      installer.launchInstaller(file); 
      toastMsg = getString(R.string.file_successfully_downloaded); 
     } else { 
      toastMsg = getString(R.string.could_not_locate_file); 
     } 

     if (!toastMsg.isEmpty()) { 
      makeToast(toastMsg); 
     } 

     removeWorkingDialog(); 
    } 

    private void removeWorkingDialog() { 
     if (working_dialog != null) { 
      working_dialog.dismiss(); 
      working_dialog = null; 
     } 
    } 
} 
+0

ListActivity에서 모두 정상이지만 ListFragment에서 progressdialog를 보여줍니다. – user3833154

+0

조각의 레이아웃에 대한 XML을 게시 할 수 있습니까? 그냥 그것을 배제하는 것. – cYrixmorten