Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 跳过98帧!应用程序可能在其主线程上做了太多工作_Android_Multithreading_Sqlite - Fatal编程技术网

Android 跳过98帧!应用程序可能在其主线程上做了太多工作

Android 跳过98帧!应用程序可能在其主线程上做了太多工作,android,multithreading,sqlite,Android,Multithreading,Sqlite,我有导航抽屉和导航菜单。单击每个导航菜单时,会打开特定的片段。每个片段显示从SQLite外部数据库获取数据的RecylerView。现在,当打开新片段时,必须等待几秒钟;当单击每个项目以转到下一个活动以显示有关该项目的详细信息时,必须等待5秒钟以打开详细信息活动。我知道这是在主线程中获取数据和在主线程中获取位图的问题。但我不知道如何使用use AsyncTask解决此问题。我的最大问题是打开一个新活动以显示信息并等待5秒钟 这是我的亚洲碎片。 AsiaFragment public class

我有导航抽屉和导航菜单。单击每个导航菜单时,会打开特定的片段。每个片段显示从SQLite外部数据库获取数据的RecylerView。现在,当打开新片段时,必须等待几秒钟;当单击每个项目以转到下一个活动以显示有关该项目的详细信息时,必须等待5秒钟以打开详细信息活动。我知道这是在主线程中获取数据和在主线程中获取位图的问题。但我不知道如何使用use AsyncTask解决此问题。我的最大问题是打开一个新活动以显示信息并等待5秒钟

这是我的亚洲碎片。 AsiaFragment

public class AsiaFragment extends Fragment {

private static final String ASIA_FRAGMENT = "asia_fragment";
ArrayList<AsiaCountry> asiaCountries = new ArrayList<>();
ContentAdapter contentAdapter;
RecyclerView recyclerView;
private boolean isListView;
private Menu menu;
private StaggeredGridLayoutManager staggeredGridLayoutManager;
private MyAsyncTas myAsyncTas;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);

}

@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.asia_fragment, container, false);
    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);

    getActivity().setTitle("Asia");

    isListView = true;



    return view;

}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
   new MyAsyncTas().execute();
}

// When click on grid icon, view items must be convert to grid.
public void toggle() {
    MenuItem item = menu.findItem(R.id.grid);
    if (isListView) {
        staggeredGridLayoutManager.setSpanCount(2);
        item.setIcon(R.drawable.ic_vertical);
        item.setTitle("Show as list");
        isListView = false;
    } else {
        staggeredGridLayoutManager.setSpanCount(1);
        item.setIcon(R.drawable.ic_grid);
        item.setTitle("Show grid");
        isListView = true;
    }
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.grid_item, menu);
    this.menu = menu;
    Log.d("Menu created", "grid");
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.grid) {
        Toast.makeText(getActivity(), "Grid item touched", Toast.LENGTH_SHORT).show();
        toggle();
        return true;
    }
    if (id == R.id.settings) {
        Toast.makeText(getActivity(), "Setting clicked", Toast.LENGTH_SHORT).show();
        return true;
    }


    return onOptionsItemSelected(item);
}

// When loading AsiaFragment, database loading from Eternal database.

public void loadDataBase() {
    WorldCountryDatabase worldCountryDatabase = new WorldCountryDatabase(getActivity());
    try {

        worldCountryDatabase.createDatabase();
        worldCountryDatabase.openDataBase();
        Log.d("TAG", "Database open");
    } catch (SQLiteException o) {
        o.printStackTrace();
        Log.d("Tag", o.getMessage());
    }
    try {


        // Tell to database , take name and viewImage from worldCountries .
        Cursor cursor = worldCountryDatabase.QueryData("SELECT name, Image   FROM country WHERE continent ='آسیا'");

        if (cursor != null) {
            if (cursor.moveToFirst()) {
                do {

                    AsiaCountry asiaCountry = new AsiaCountry();
                    asiaCountry.setName(cursor.getString(0));
                    asiaCountry.setFlag(cursor.getString(1));
                    Log.d(ASIA_FRAGMENT, cursor.getString(1));
                    asiaCountries.add(asiaCountry);

                } while (cursor.moveToNext());
                worldCountryDatabase.close();

            }


        }
    } catch (SQLiteException o) {
        o.printStackTrace();
        Log.d("TAG", o.getMessage());
    }
    // When loading RecylerView staggeredGridLayout loading.
    staggeredGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
    contentAdapter = new ContentAdapter(getActivity(), asiaCountries);
    contentAdapter.notifyDataSetChanged();
    contentAdapter.setListener(new ContentAdapter.Listener() {
        @Override
        public void onClick(int position) {


        }
    });

    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(staggeredGridLayoutManager);
    recyclerView.setAdapter(contentAdapter);


}

public class MyAsyncTas extends AsyncTask<Void, Void, Boolean> {
    @Override
    protected Boolean doInBackground(Void... params) {

        return true;
    }


    @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
        loadDataBase();

    }
}
公共类AsiaFragment扩展片段{
私有静态最终字符串ASIA\u FRAGMENT=“ASIA\u FRAGMENT”;
ArrayList asiaCountries=新的ArrayList();
内容适配器;
回收视图回收视图;
私有布尔isListView;
私人菜单;
私人StaggedGridLayoutManager StaggedGridLayoutManager;
私有MyAsyncTas MyAsyncTas;
@凌驾
创建时的公共void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
设置选项菜单(真);
}
@凌驾
创建视图上的公共视图(布局、充气机、最终视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.asia_碎片,容器,错误);
recyclerView=(recyclerView)view.findViewById(R.id.recyclerView);
getActivity().setTitle(“亚洲”);
isListView=true;
返回视图;
}
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
新建MyAsyncTas().execute();
}
//单击网格图标时,视图项必须转换为网格。
公共无效切换(){
MenuItem=menu.findItem(R.id.grid);
如果(isListView){
交错排列布局管理器。设置计数器(2);
项目.设置图标(R.可绘制.ic_垂直);
项目。设置标题(“显示为列表”);
isListView=false;
}否则{
StaggedGridLayoutManager.SetPanCount(1);
项目设置图标(R.可绘制ic_网格);
项目。设置标题(“显示网格”);
isListView=true;
}
}
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
充气机。充气(右菜单。网格项,菜单);
this.menu=菜单;
Log.d(“创建菜单”、“网格”);
super.onCreateOptions菜单(菜单,充气机);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
int id=item.getItemId();
if(id==R.id.grid){
Toast.makeText(getActivity(),“网格项目已触摸”,Toast.LENGTH_SHORT.show();
切换();
返回true;
}
if(id==R.id.settings){
Toast.makeText(getActivity(),“单击设置”,Toast.LENGTH_SHORT.show();
返回true;
}
返回选项ItemSelected(项目);
}
//加载AsiaFragment时,从永久数据库加载数据库。
公共数据库(){
WorldCountryDatabase WorldCountryDatabase=新的WorldCountryDatabase(getActivity());
试一试{
worldCountryDatabase.createDatabase();
openDataBase();
Log.d(“标记”,“数据库打开”);
}捕获(SQLITEO异常){
o、 printStackTrace();
Log.d(“Tag”,o.getMessage());
}
试一试{
//告诉数据库,从worldCountries获取名称和视图图像。
Cursor Cursor=worldCountryDatabase.QueryData(“选择名称,来自大陆所在国家的图像=‘آسیا’”);
如果(光标!=null){
if(cursor.moveToFirst()){
做{
亚洲国家=新亚洲国家();
asiaCountry.setName(cursor.getString(0));
asiaCountry.setFlag(cursor.getString(1));
Log.d(ASIA_片段,cursor.getString(1));
亚洲国家。添加(亚洲国家);
}while(cursor.moveToNext());
worldcontrydatabase.close();
}
}
}捕获(SQLITEO异常){
o、 printStackTrace();
Log.d(“TAG”,o.getMessage());
}
//加载RecylerView时,请错开布局加载。
StaggedGridLayoutManager=新的StaggedGridLayoutManager(1,StaggedGridLayoutManager.VERTICAL);
contentAdapter=新的contentAdapter(getActivity(),asiaCountries);
contentAdapter.notifyDataSetChanged();
contentAdapter.setListener(新的contentAdapter.Listener(){
@凌驾
公共void onClick(内部位置){
}
});
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(StaggedGridLayoutManager);
recyclerView.setAdapter(contentAdapter);
}
公共类MyAsyncTas扩展了AsyncTask{
@凌驾
受保护的布尔doInBackground(Void…params){
返回true;
}
@凌驾
受保护的void onPostExecute(布尔aBoolean){
super.onPostExecute(aBoolean);
loadDataBase();
}
}
这是我的DetailCountry片段,必须在单击的国家/地区显示

详细信息中心

    public class DetailsCountry extends AppCompatActivity implements 
    TabLayout.OnTabSelectedListener,
    EconomicFragment.EconomicOnFragmentInteractionListener,
    SummarizeFragment.SummarizeOnFragmentInteractionListener,
    HistoryFragment.HistoryOnFragmentInteractionListener,
    GeographyFragment.GeographyOnFragmentInteractionListener,
    TipsFragment.TipsOnFragmentInteractionListener,
    DescriptionFragment.OtherOnFragmentInteractionListener,
    PeopleFragment.PeopleOnFragmentInteractionListener {

public static String NAME_COUNTRY = "name";
public final String pageTitle[] = {"خلاصه",
        "تاریخ",
        "جغرافی",
        "اقتصاد",
        "مردم",
        "غیره",
        "نکات"};
ArrayList<AsiaCountry> asiaList = new ArrayList<>();
ImageView imageHistory;
TabLayout tabLayout;
ViewPager viewPager;
String content;
Bundle bundle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.detial_country);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_details);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

    }
    viewPager = (ViewPager) findViewById(R.id.viewPager_detail_country);
    tabLayout = (TabLayout) findViewById(R.id.tabLayout_detail_country);
    imageHistory = (ImageView) findViewById(R.id.image_detail_country);

    bundle = getIntent().getExtras();
    if (bundle != null) {

        content = bundle.getString("name");
        Log.d("contentDetail", content);
    }

    // Set title for activity title.
    getSupportActionBar().setTitle(content);
    retrieveData();

    if (asiaList != null && asiaList.size() > 0) {
        for (int i = 0; i < asiaList.size(); i++) {
            imageHistory.setImageBitmap(loadBitmapFromAssets(getApplicationContext(),
                    asiaList.get(i).getImageResourceID()));

        }
    }

    int numberPage = 7;
    for (int i = 0; i < numberPage; i++) {

        tabLayout.addTab(tabLayout.newTab().setText(pageTitle[i]));

    }
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    ViewPagerCountryAdapter viewPagerAdapter = new ViewPagerCountryAdapter
            (getSupportFragmentManager(), tabLayout.getTabCount());

    viewPager.setAdapter(viewPagerAdapter);
    tabLayout.setupWithViewPager(viewPager);

    tabLayout.setOnTabSelectedListener(this);

}

private void retrieveData() {
    WorldCountryDatabase worldCountryDatabase = new WorldCountryDatabase(getApplicationContext());

    worldCountryDatabase.createDatabase();
    worldCountryDatabase.openDataBase();
    Log.d(ARG_PARAM1, "Database opened");

    try {


        Cursor cursor = worldCountryDatabase.QueryData("SELECT viewImage FROM country WHERE name = '" + content + "'");
        Log.d("CURSOR", cursor.toString());

        if (cursor.moveToFirst()) {
            do {

                AsiaCountry asia = new AsiaCountry();
                asia.setImageResourceID(cursor.getString(0));
                Log.d("image", cursor.getString(0));
                asiaList.add(asia);

            } while (cursor.moveToNext());
            cursor.close();
        }

    } catch (SQLException e) {
        e.printStackTrace();
        Log.d("TAG", e.getMessage());

    }


}

@Nullable
private Bitmap loadBitmapFromAssets(Context context, String path) {
    InputStream stream = null;
    try {
        stream = context.getAssets().open(path);
        return BitmapFactory.decodeStream(stream);

    } catch (Exception ignored) {
    } finally {
        try {
            if (stream != null) {
                stream.close();
            }
        } catch (Exception ignored) {
        }
    }
    return null;
}


@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(base));
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
    }
    return super.onOptionsItemSelected(item);
}


@Override
public void onTabSelected(TabLayout.Tab tab) {
    viewPager.setCurrentItem(tab.getPosition());


}

@Override
public void onTabUnselected(TabLayout.Tab tab) {

}

@Override
public void onTabReselected(TabLayout.Tab tab) {

}


@Override
public void economiOnFragmentInteraction(Uri uri) {

}

@Override
public void tipsOnFragmentInteraction(Uri uri) {

}

@Override
public void otherOnFragmentInteraction(Uri uri) {

}

@Override
public void peopleOnFragmentInteraction(Uri uri) {

}

@Override
public void historyOnFragmentInteraction(Uri uri) {

}

@Override
public void geographyOnFragmentInteraction(Uri uri) {

}

@Override
public void summarizeOnFragmentInteraction(Uri uri) {

}

public class DetailTask extends AsyncTask<Void, Void, Boolean>{
    @Override
    protected Boolean doInBackground(Void... params) {
        return null;
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);

    }
}
公共类详细信息中心扩展了AppCompatActivity实现
TabLayout.ontAbsSelectedListener,
EconomicFragment.EconomicOnFragmentInteractionListener,
SummaryFragment.SummaryOnFragmentInteractionListener,
HistoryFragment.HistoryOnFragmentInteractionListener,
GeographyFragment.GeographyOnFragmentInteractionListener,
TipsFragment.TipsOnFragmentInteractionListener,
DescriptionFragment.OtherOnFragmentInteractionListener,
PeopleFragment.PeopleOnFragmentInteractionListener{
公共静态字符串名称\u COUNTRY=“NAME”;
公共最终字符串pageTitle[]={“خلاه”,
"تاریخ",
"جغرافی",
"اقتصاد",
"مردم",
"غیره",