androidプロジェクトはコンパイルされますが、正しく実行されません

ワッフル123

これは私が持っている主な活動ファイルです:

package de.project.packagelist;

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

import de.project.packagelist.models.Pkg;

public class MainActivity extends AppCompatActivity {

    public static MainActivity instance;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        instance = this;
        setContentView(R.layout.activity_main);

        populatePackages();
    }

    public void onPackageUninstalled(String pkgName) {
        Toast.makeText(this, pkgName + " is uninstalled", Toast.LENGTH_SHORT).show();
        populatePackages();
    }

    public void onPackageInstalled(String pkgName) {
        Toast.makeText(this, pkgName + " is installed", Toast.LENGTH_SHORT).show();
        populatePackages();
    }

    public void onPackageChanged(String pkgName) {
        Toast.makeText(this, pkgName + " is changed", Toast.LENGTH_SHORT).show();
        populatePackages();
    }

    public void populatePackages() {
        ArrayList<Pkg> pkgList = new ArrayList<>();
        PackageListAdapter packageListAdapter = new PackageListAdapter(this, pkgList);
        ListView listView = (ListView) findViewById(R.id.package_list);
        listView.setAdapter(packageListAdapter);
        pkgList.clear();
        PackageManager pm = getPackageManager();
        List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_META_DATA);

        for (PackageInfo packageInfo : packages) {
            pkgList.add(new Pkg(packageInfo.packageName, packageInfo.packageName, packageInfo.versionName, packageInfo.versionCode));
        }
    }

    class PackageListAdapter extends ArrayAdapter<Pkg> {

        public PackageListAdapter(Context context, List<Pkg> packages) {
            super(context, R.layout.list_item_package, packages);
        }

        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            View v = convertView;

            if (v == null) {
                LayoutInflater vi;
                vi = LayoutInflater.from(getContext());
                v = vi.inflate(R.layout.list_item_package, null);
            }
            final Pkg p = getItem(position);
            if (p != null) {
                TextView tt1 = (TextView)v.findViewById(R.id.pkg_label);
                tt1.setText(p.getLabel());
                TextView tt2 = (TextView)v.findViewById(R.id.pkg_name);
                tt2.setText(p.getName());
                TextView tt3 = (TextView)v.findViewById(R.id.pkg_version);
                tt3.setText(p.getVersionName());
                Button btn1 = (Button)v.findViewById(R.id.pkg_uninstall);
                btn1.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(getApplicationContext(), "Uninstalling package: " + p.getName(), Toast.LENGTH_SHORT).show();
                    }
                });

                Button btn2 = (Button)v.findViewById(R.id.pkg_launch);
                btn2.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(getApplicationContext(), "Launching package: " + p.getName(), Toast.LENGTH_SHORT).show();
                    }
                });

                ImageView imageView = (ImageView)v.findViewById(R.id.pkg_icon);
//                imageView.setImageDrawable(p.get);

            }

            return v;
        }
    }

}

これは受信者のコードです:

import android.net.Uri;

import de.project.packagelist.MainActivity;


public class PackageChangedBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //triggered whenever any change happens to any package
        //should inform activity
        Uri data = intent.getData();
        String pkgName = data.toString().substring(data.getScheme().length() + 1); //remove 'package:'
        if(MainActivity.instance != null) {
            if(intent.getAction() == "android.intent.action.PACKAGE_ADDED") {
                MainActivity.instance.onPackageInstalled(pkgName);
            } else if(intent.getAction() == "android.intent.action.PACKAGE_REMOVED") {
                MainActivity.instance.onPackageUninstalled(pkgName);
            } else if(intent.getAction() == "android.intent.action.PACKAGE_CHANGED") {
                MainActivity.instance.onPackageChanged(pkgName);
            }
        }
    }
}

私のコードはエラーなしでコンパイルされますが、実行すると起動に時間がかかりすぎ、ボタンが応答しなくなります。古いバージョンとライブラリを使用していることは知っていますが、コード内で改善できることはありますか。XMLファイル(マニフェストとレイアウト)には、起動アイコンと2つのボタンがあり、1つはパッケージを起動し、もう1つはパッケージをアンインストールします。

私は何が間違っているのですか?

mrtcnkryln

populatePackages機能を変えないといけないと思いますアダプタを作成し、各ブロドキャストプロセスでリストビューを何度も設定します。

私はあなたがである関数を作成する必要があると思います initAdapter

InitAdapter関数:

public void initAdapter(){
  //not set list here and PackageListAdapter define as global
  packageListAdapter = new PackageListAdapter(this);
  ListView listView = (ListView) findViewById(R.id.package_list);
  listView.setAdapter(packageListAdapter);
}

アダプタクラスのコンストラクタを変更し、setItems関数を作成します

public PackageListAdapter(Context context) {
            super(context, R.layout.list_item_package);
        }
public setItems(List<Pkg> packages) {
  this.packages = packages
}

そしてpopulatePackages関数で:

public void populatePackages() {
        ArrayList<Pkg> pkgList = new ArrayList<>();
        PackageManager pm = getPackageManager();
        List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_META_DATA);

        for (PackageInfo packageInfo : packages) {
            pkgList.add(new Pkg(packageInfo.packageName, packageInfo.packageName, packageInfo.versionName, packageInfo.versionCode));
        }
        packageListAdapter.setItems(pkgList); 
    }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

プロジェクトはコンパイルされますが実行できません、NoClassDefFoundError

分類Dev

Android Studioは「シンボルRを解決できません」が、プロジェクトはコンパイルされて実行されます

分類Dev

'npm start'コマンドを実行した後、プロジェクトは正しくコンパイルされていますが、bundle.jsでアセットフォルダーが作成されていませんか?

分類Dev

プロジェクトは再構築に失敗しますが、APKは正しくコンパイルおよび実行されます

分類Dev

iccでコンパイルすると、プログラムが正しく実行されません。

分類Dev

Javaプロジェクトはコマンドライン(エクスポートされたjar)で正しく実行されますが、Eclipseは使用されません

分類Dev

プロジェクト参照はコンパイルされません '参照である必要があります'

分類Dev

C / C ++プロジェクトはXcodeでコンパイルされますが、gcc / g ++ではコンパイルされません

分類Dev

Androidマルチトラッカーサンプルプロジェクトは実行されますが、検出の形式が表示されません

分類Dev

プロジェクトはコンパイルされますが、コンパイラに情報が表示されません

分類Dev

illegalargumentexception-プロジェクトはNetbeansで実行されていますが、TomcatではWarファイルとして実行されていません

分類Dev

illegalargumentexception-プロジェクトはNetbeansで実行されていますが、TomcatではWarファイルとして実行されていません

分類Dev

Jar ファイル クラスはコマンド プロンプトから実行されますが、QTP のシェル スクリプト オブジェクトを介して実行すると ClassDefFound はありません。

分類Dev

プログラムはコンソールからは正しく実行されますが、Windowsサービスからは実行されません

分類Dev

FragmentTransactionはKotlinAndroidプロジェクトでコンパイルされません

分類Dev

Visual Studioでは、Debugフォルダーをコミットしたくありませんが、dllファイルが含まれているため、移動するとプロジェクトがコンパイルされません。

分類Dev

VLCはインストールされていますが、正しく実行されません

分類Dev

スクリプトはExtendScriptToolkitで正しく実行されますが、Illustratorでは実行されません

分類Dev

プログラムはコンパイル、実行されますが、DevC ++で終了しません

分類Dev

Maven Javaプロジェクトはビルドされますが、実行されません

分類Dev

Javaプログラムは**実行**されますが、コンパイルされません

分類Dev

cのmpiプログラムはコンパイルされますが、実行されません

分類Dev

私のCプログラムはコンパイルされますが、実行されません

分類Dev

コードを2回実行すると、JPypeが正しくコンパイルされません

分類Dev

アプリは実行されませんが、エラーなしでコンパイルされます

分類Dev

Flutterでfirestoreを更新した後、プロジェクトがコンパイルされません

分類Dev

Python tkinter-コンパイルは成功しましたが、Exeとしてコンパイルするとプログラムが正しく実行されません

分類Dev

Webpackは正常にコンパイルされましたが、プロジェクトがブラウザに読み込まれません

分類Dev

Mavenプロジェクトはコンパイルされますが、ワークスペースにインポートがありません

Related 関連記事

  1. 1

    プロジェクトはコンパイルされますが実行できません、NoClassDefFoundError

  2. 2

    Android Studioは「シンボルRを解決できません」が、プロジェクトはコンパイルされて実行されます

  3. 3

    'npm start'コマンドを実行した後、プロジェクトは正しくコンパイルされていますが、bundle.jsでアセットフォルダーが作成されていませんか?

  4. 4

    プロジェクトは再構築に失敗しますが、APKは正しくコンパイルおよび実行されます

  5. 5

    iccでコンパイルすると、プログラムが正しく実行されません。

  6. 6

    Javaプロジェクトはコマンドライン(エクスポートされたjar)で正しく実行されますが、Eclipseは使用されません

  7. 7

    プロジェクト参照はコンパイルされません '参照である必要があります'

  8. 8

    C / C ++プロジェクトはXcodeでコンパイルされますが、gcc / g ++ではコンパイルされません

  9. 9

    Androidマルチトラッカーサンプルプロジェクトは実行されますが、検出の形式が表示されません

  10. 10

    プロジェクトはコンパイルされますが、コンパイラに情報が表示されません

  11. 11

    illegalargumentexception-プロジェクトはNetbeansで実行されていますが、TomcatではWarファイルとして実行されていません

  12. 12

    illegalargumentexception-プロジェクトはNetbeansで実行されていますが、TomcatではWarファイルとして実行されていません

  13. 13

    Jar ファイル クラスはコマンド プロンプトから実行されますが、QTP のシェル スクリプト オブジェクトを介して実行すると ClassDefFound はありません。

  14. 14

    プログラムはコンソールからは正しく実行されますが、Windowsサービスからは実行されません

  15. 15

    FragmentTransactionはKotlinAndroidプロジェクトでコンパイルされません

  16. 16

    Visual Studioでは、Debugフォルダーをコミットしたくありませんが、dllファイルが含まれているため、移動するとプロジェクトがコンパイルされません。

  17. 17

    VLCはインストールされていますが、正しく実行されません

  18. 18

    スクリプトはExtendScriptToolkitで正しく実行されますが、Illustratorでは実行されません

  19. 19

    プログラムはコンパイル、実行されますが、DevC ++で終了しません

  20. 20

    Maven Javaプロジェクトはビルドされますが、実行されません

  21. 21

    Javaプログラムは**実行**されますが、コンパイルされません

  22. 22

    cのmpiプログラムはコンパイルされますが、実行されません

  23. 23

    私のCプログラムはコンパイルされますが、実行されません

  24. 24

    コードを2回実行すると、JPypeが正しくコンパイルされません

  25. 25

    アプリは実行されませんが、エラーなしでコンパイルされます

  26. 26

    Flutterでfirestoreを更新した後、プロジェクトがコンパイルされません

  27. 27

    Python tkinter-コンパイルは成功しましたが、Exeとしてコンパイルするとプログラムが正しく実行されません

  28. 28

    Webpackは正常にコンパイルされましたが、プロジェクトがブラウザに読み込まれません

  29. 29

    Mavenプロジェクトはコンパイルされますが、ワークスペースにインポートがありません

ホットタグ

アーカイブ