Android에서 데이터를로드하는 동안 검은 색 화면을 피하는 방법

Pankaj

Android의 원격 서버에서 데이터를 가져오고 있습니다. 데이터가로드되는 동안 7-8 초 동안 유지되는 검은 색 화면이 표시됩니다. 이로 인해 Android에 ANR 대화 상자가 표시되는 경우가 있습니다. 데이터의 백그라운드로드에 asynctask를 사용했지만 검은 색 화면이 유지됩니다. 또한 활동 표시 줄에서 불확실한 진행 상황을 볼 수 없습니다. 내가 무엇을 잘못하고 있지? 아래 코드를 붙여넣고 있습니다.

public class ItemActivity extends Activity {

    private String str = null;
    private ListView listview;
    private LazyItemLoadAdapter adapter;
    private Item[] item_data = null;

    private Item[] filteredItems = null;

    private int id;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        setContentView(R.layout.activity_item);

        ActionBarUtils.setActionBar(this);

        id = getIntent().getExtras().getInt("id");

        listview = (ListView) findViewById(R.id.listViewAllItems);

        AsyncData data=new AsyncData();
        data.execute(String.valueOf(id), "http://kurdshopping.net/apj/adlist.php");
        try {
            item_data=data.get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if (item_data == null || item_data.length == 0) {
            listview.setVisibility(View.GONE);
            return;
        }
        adapter = new LazyItemLoadAdapter(this, R.layout.listview_item_row, item_data);

        listview.setAdapter(adapter);
        listview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {
                int itemid = item_data[position].id;
                Toast.makeText(ItemActivity.this, String.valueOf(itemid),
                        Toast.LENGTH_SHORT).show();
                if (id == 96) {
                    Intent carIntent = new Intent(ItemActivity.this,
                            CarActivity.class);
                    carIntent.putExtra("id", itemid);
                    startActivity(carIntent);
                } else {
                    Intent adIntent = new Intent(ItemActivity.this,
                            AdActivity.class);
                    adIntent.putExtra("id", itemid);
                    startActivity(adIntent);
                }
            }
        });

    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        if (item_data == null || item_data.length == 0) {
            menu.getItem(0).setEnabled(false);
        }
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.item, menu);
        return true;
    }


    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        switch (item.getItemId()) {
        case R.id.action_search:
            Intent optionsIntent = new Intent(ItemActivity.this,
                    OptionsActivity.class);
            optionsIntent.putExtra("id", id);
            startActivityForResult(optionsIntent, 1);
            break;
        }
        return super.onMenuItemSelected(featureId, item);
    }

    private class AsyncData extends AsyncTask<String, Void, Item[]>{

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            setProgressBarIndeterminateVisibility(true);
        }

        @Override
        protected Item[] doInBackground(String... arg0) {
            Item[] item_data=null;
            try {
                ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
                postParameters
                        .add(new BasicNameValuePair("id", arg0[0]));
                str = CustomHttpClient.executeHttpPost(
                        arg0[1], postParameters);
                JSONArray array = new JSONArray(str);
                item_data = new Item[array.length()];

                for (int i = 0; i < item_data.length; i++) {
                    JSONObject jdata = array.getJSONObject(i);
                    String path = "http://kurdshopping.net/thumbs/"
                            + jdata.getString("name");
                    int itemid = jdata.getInt("id");
                    item_data[i] = new Item();
                    item_data[i].id = itemid;
                    item_data[i].imageUrl = path;
                    item_data[i].city = jdata.getString("city_name");
                    item_data[i].make = jdata.getString("cc_name");
                    item_data[i].model = jdata.getString("cm_name");
                    item_data[i].price = jdata.getString("price");
                    item_data[i].text = jdata.getString("title") + "\nPrice: "
                            + jdata.getString("price");
                    Log.i("break", "break");
                }
            } catch (NotFoundException n) {
                Log.e("ItemActivity", n.getMessage());
            } catch (JSONException j) {
                Log.e("ItemActivity", j.getMessage());
            } catch (Exception e) {
                Log.e("ItemActivity", e.getMessage());
            }
            return item_data;
        }

        @Override
        protected void onPostExecute(Item[] result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            setProgressBarIndeterminateVisibility(false);
        }

    }
}

도움을 주시면 감사하겠습니다. 미리 감사드립니다.

Cybersam

data.get()호출은 AsyncTask가 처리를 완료 할 때까지 UI 스레드를 완전히 차단합니다.

이 두 명령문을 onPostExecute () 끝으로 이동해야합니다.

   adapter = new LazyItemLoadAdapter(this, R.layout.listview_item_row, item_data);

   listview.setAdapter(adapter);

그리고 data.get()통화를 둘러싼 전체 try / catch 블록을 제거해야합니다 .

마지막으로 추가 구체화로 onResume()활동이 다시 표시 될 때마다 데이터를 새로 고칠 수 있도록 이 두 줄을로 이동해야하는지 여부를 고려해야합니다 .

    AsyncData data=new AsyncData();
    data.execute(String.valueOf(id), "http://kurdshopping.net/apj/adlist.php");

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ActiveJob이 외부 API에서 많은 데이터를 검색하는 동안 보류 화면을 표시하는 방법

분류에서Dev

Angular에서 검색하는 동안 전체 데이터로드를 방지하는 방법

분류에서Dev

안드로이드에서 JSON 데이터를 검색하는 방법을 모릅니다 (특히)

분류에서Dev

다른 활동에서 스피너로 데이터를 검색하는 방법은 무엇입니까?

분류에서Dev

화면에 그림을 표시하는 동안 검은 색 화면

분류에서Dev

월별 데이터가 연도별로 열에있을 때 이전 12 개월 동안의 데이터를 검색하는 방법은 무엇입니까?

분류에서Dev

AppIcon에서 검은 색 화면을 제거하는 방법-IOS

분류에서Dev

Vue.js : Firebase 저장소에서 데이터를 검색 한 후 비동기 적으로 템플릿을로드하는 방법은 무엇입니까?

분류에서Dev

SQL Server 데이터베이스에서 데이터를 검색하는 동안 WCF 서비스에서 where 절을 사용하여 쿼리하는 방법

분류에서Dev

Dell Precision M4800에 Ubuntu 12.04.3을 설치하는 동안 검은 색 화면

분류에서Dev

Dell Precision M4800에 Ubuntu 12.04.3을 설치하는 동안 검은 색 화면

분류에서Dev

데이터베이스에서 검색되는 반복 값을 피하는 방법은 무엇입니까?

분류에서Dev

Android 기기에서 카메라를 뒤집는 동안 WebRTC 검은 색 화면

분류에서Dev

내 앱이로드되는 동안 흰색 화면을 제거하는 방법은 무엇입니까?

분류에서Dev

파일을 업로드하는 동안 데이터를 서버로 보내는 방법은 무엇입니까?

분류에서Dev

DB에서 레코드를 검색하는 동안 페이지의 일부를 업데이트하는 방법

분류에서Dev

Chrome에서 검색하는 동안 Windows 스토어 팝업을 중지하는 방법은 무엇입니까?

분류에서Dev

Elasticsearch에서 집계하는 동안 OR 검색을 수행하는 방법은 무엇입니까?

분류에서Dev

데스크톱 및 Outlook Web 용 Outlook 내에서 추가 기능이 작동하는 화면을 검색하는 방법은 무엇입니까?

분류에서Dev

MySQL에서 BLOB 스토리지를 최적화하는 방법. 기록을 검색하는 동안 더 많은 시간이 걸립니다

분류에서Dev

활동 간 전환시 흰색 화면을 피하는 방법

분류에서Dev

로드하는 동안 Android가 스플래시 화면을 표시하지만 대신 검은 색 화면이 표시됨

분류에서Dev

jquery로 양식을 제출하고 JSON에서 데이터를 검색하는 방법은 무엇입니까?

분류에서Dev

Java를 사용하여 긴 blob (이미지)을 mysql 데이터베이스에 업로드하고 PHP에서 검색하는 방법은 무엇입니까?

분류에서Dev

텍스트를 입력하는 동안 노틸러스 3.6에서 검색을 비활성화하는 방법!

분류에서Dev

특정 기간 동안 Android에서 검색 기록을 얻는 방법

분류에서Dev

내 수업에서 웹뷰 URL을로드 할 때 검은 색 화면을 수정하는 방법

분류에서Dev

HashSet에서 검색하는 동안 정규식을 사용하는 방법

분류에서Dev

Listview의 항목을 클릭 할 때 새로운 활동에서 firebase에서 데이터를 검색하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    ActiveJob이 외부 API에서 많은 데이터를 검색하는 동안 보류 화면을 표시하는 방법

  2. 2

    Angular에서 검색하는 동안 전체 데이터로드를 방지하는 방법

  3. 3

    안드로이드에서 JSON 데이터를 검색하는 방법을 모릅니다 (특히)

  4. 4

    다른 활동에서 스피너로 데이터를 검색하는 방법은 무엇입니까?

  5. 5

    화면에 그림을 표시하는 동안 검은 색 화면

  6. 6

    월별 데이터가 연도별로 열에있을 때 이전 12 개월 동안의 데이터를 검색하는 방법은 무엇입니까?

  7. 7

    AppIcon에서 검은 색 화면을 제거하는 방법-IOS

  8. 8

    Vue.js : Firebase 저장소에서 데이터를 검색 한 후 비동기 적으로 템플릿을로드하는 방법은 무엇입니까?

  9. 9

    SQL Server 데이터베이스에서 데이터를 검색하는 동안 WCF 서비스에서 where 절을 사용하여 쿼리하는 방법

  10. 10

    Dell Precision M4800에 Ubuntu 12.04.3을 설치하는 동안 검은 색 화면

  11. 11

    Dell Precision M4800에 Ubuntu 12.04.3을 설치하는 동안 검은 색 화면

  12. 12

    데이터베이스에서 검색되는 반복 값을 피하는 방법은 무엇입니까?

  13. 13

    Android 기기에서 카메라를 뒤집는 동안 WebRTC 검은 색 화면

  14. 14

    내 앱이로드되는 동안 흰색 화면을 제거하는 방법은 무엇입니까?

  15. 15

    파일을 업로드하는 동안 데이터를 서버로 보내는 방법은 무엇입니까?

  16. 16

    DB에서 레코드를 검색하는 동안 페이지의 일부를 업데이트하는 방법

  17. 17

    Chrome에서 검색하는 동안 Windows 스토어 팝업을 중지하는 방법은 무엇입니까?

  18. 18

    Elasticsearch에서 집계하는 동안 OR 검색을 수행하는 방법은 무엇입니까?

  19. 19

    데스크톱 및 Outlook Web 용 Outlook 내에서 추가 기능이 작동하는 화면을 검색하는 방법은 무엇입니까?

  20. 20

    MySQL에서 BLOB 스토리지를 최적화하는 방법. 기록을 검색하는 동안 더 많은 시간이 걸립니다

  21. 21

    활동 간 전환시 흰색 화면을 피하는 방법

  22. 22

    로드하는 동안 Android가 스플래시 화면을 표시하지만 대신 검은 색 화면이 표시됨

  23. 23

    jquery로 양식을 제출하고 JSON에서 데이터를 검색하는 방법은 무엇입니까?

  24. 24

    Java를 사용하여 긴 blob (이미지)을 mysql 데이터베이스에 업로드하고 PHP에서 검색하는 방법은 무엇입니까?

  25. 25

    텍스트를 입력하는 동안 노틸러스 3.6에서 검색을 비활성화하는 방법!

  26. 26

    특정 기간 동안 Android에서 검색 기록을 얻는 방법

  27. 27

    내 수업에서 웹뷰 URL을로드 할 때 검은 색 화면을 수정하는 방법

  28. 28

    HashSet에서 검색하는 동안 정규식을 사용하는 방법

  29. 29

    Listview의 항목을 클릭 할 때 새로운 활동에서 firebase에서 데이터를 검색하는 방법은 무엇입니까?

뜨겁다태그

보관