문제가있는 Android 앱이 있습니다.Android - 진행 표시가 AsyncTask에 표시되지 않음
기본적으로 ProgressDialog
은 전혀 표시되지 않습니다. 나는 이것이 어떤 일종의 스레딩 문제라고 생각하지만 그것을 고치는 방법을 모른다.
나는 ActionBarSherlock
과 일부 Fragments
을 사용하고 있습니다. 나는 또한 새로운 안드로이드 DrawerLayout
을 사용하고 있는데, 클릭 할 때 조각을 대체하는 서랍에 내 옵션이 있습니다.
내 앱이 처음로드되면 데이터베이스를 검사하여 처음 데이터가 다운로드되었는지 확인하려고합니다. 그렇지 않은 경우 데이터를 다운로드하려면 AsyncTask
을 시작하십시오. 이 동안에는 ProgressDialog
디스플레이가 있어야하지만 그렇지 않습니다.
누군가 내가 잘못 가고있는 것을 볼 수 있습니까? 감사.
MainScreen - 응용 프로그램이
public class MainScreen extends SherlockFragment {
public static final String TAG = "MainScreen";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_main, container, false);
setHasOptionsMenu(false);
ImageView imgLogo = (ImageView) rootView.findViewById(R.id.imgMainScreen);
imgLogo.setOnClickListener(new ButtonHandler(getActivity()));
checkDatabase();
return rootView;
}
private void checkDatabase() {
//Ensure there is data in the database
DBHelper db = new DBHelper(this.getSherlockActivity());
db.checkDatabase();
}
...
}
DBHelper.checkDatabase을 (열립니다 기본 방문 페이지/조각) - 다운로드에게 마지막으로
public void checkDatabase() {
if (isEmpty()) {
//Connect to net and download data
NetworkManager nm = new NetworkManager(activity);
if (!nm.downloadData()) {
Toast.makeText(activity, R.string.internetCheck, Toast.LENGTH_SHORT).show();
}
}
}
과를 시작하는 방법 NetworkManager.downloadData() -에서 시작하는 메서드210 : 응용 프로그램이로드하려고 시도하고, 때로는 ANR로 위의 코드를 사용하여
public boolean downloadData() {
try {
return new HttpConnection(activity).execute().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return false;
}
public class HttpConnection extends AsyncTask<Void, Void, Boolean> {
private ProgressDialog progressDialog;
private Activity m_activity;
protected HttpConnection(Activity activity) {
m_activity = activity;
}
@Override
protected void onPreExecute() {
progressDialog = new ProgressDialog(m_activity);
progressDialog.setMessage("Wait ...");
progressDialog.setCancelable(false);
progressDialog.setMax(100);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... params) {
String[] types = new String[]{"type1", "type2", "type3", "type4", };
StringBuilder sb = new StringBuilder();
for(String type : types) {
sb = new StringBuilder();
if(DBHelper.TYPE4_TABLE.equals(type)) {
InputStream is = activity.getResources().openRawResource(R.raw.dbdata);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
try {
sb.append(reader.readLine());
} catch (IOException e) {
Toast.makeText(activity.getApplicationContext(), "Error retriveving data", Toast.LENGTH_SHORT).show();
Log.e(Constants.TAG, "Error reading data");
e.printStackTrace();
}
} else {
sb = fetchURLData(Constants.ALL_URL+type);
}
cleanDataAndStore(sb, type);
}
return true;
}
@Override
protected void onPostExecute(Boolean result){
progressDialog.hide();
}
}
, 내가 얻을 모두 흰색 화면입니다. 다운로드가 완료되면 조각이로드됩니다. 따라서 누락 된 ProgressDialog
을 제외하고는 정상적으로 작동합니다.
PS 알림 각 생성자에 activity
을 설정하고 있습니다.
감사합니다.
안녕하세요. 감사합니다.대단히 감사합니다! 나는 빚지고있어! – eoinzy
제 경우에도 get()이 문제였습니다. 정보 주셔서 감사합니다!!! –
@ J.Romero 정말 도움이되는 +1 – rup35h