[Android 開発で最も一般的な 39 のエラーと例外の解決策のまとめ]

  1. appcompat_v7

ADT をバージョン 22.6.0 にアップデートすると、このライブラリが登場しました。appcompat_v7 は Google 自体の互換性パッケージで、
2.1 以降のすべてのバージョンでバージョン 4.0 のインターフェイスを使用できるようにするサポート ライブラリです。たとえば、ActionBar を使用すると、サードパーティのサポート ライブラリを使用する必要がなくなります。

  1. appcompat_v7: アプリケーション互換性パッケージ。V7 はバージョン 7、つまり android2.1 を指します。この互換性パッケージはバージョン 2.1 以降のシステムをサポートします。

  2. 最近、Google は互換性のある jar パッケージといくつかのリソース ファイルを正式に取り出して、実際にはリソース ライブラリである Android プロジェクトを作成しました。このプロジェクトを右クリックしてビルドパスに入り、Android をクリックすると、islibrary にチェックが入っていることがわかります。それは図書館だということ。実際、このライブラリは複数のプロジェクトで共有できます。ライブラリにはすでに v7.jar パッケージといくつかのアダプティブ リソースが含まれています。複数のプロジェクトを開発する場合、便宜上、いくつかの共有コードとリソースをライブラリに入れることができます。ADT の下位バージョンでは、プロジェクトのビルド時にライブラリが自動的に生成されませんが、必要に応じて新しいプロジェクトを作成し、islibrary を確認できます。上位バージョンの ADT ではライブラリが自動的に生成されますが、必要ない場合は、[Properties-android-library] で新しく作成したプロジェクトを右クリックしてライブラリを選択し、[remove] をクリックして削除します。
    3. アプリケーションをパッケージ化または実行すると、ライブラリは自動的にパッケージ化され、プロジェクトの一部としてコンパイルされます。

  3. ADT および SDK のバージョンを更新した後、プロジェクトを作成し、すべての構成が正しく、仮想マシンが正常に起動することを確認します。つまり、プロジェクト ヘッダーに感嘆符が表示されます。MainActivity ファイルをチェックインして、継承されたアクティビティは「いいえ」です。プログラムを正常に実行するには、いくつかのパッケージを導入する必要があります。アクティビティに変更することをお勧めします。

    バージョンが向上すると多くの互換性の問題が発生します。これに対処する最善の方法はバージョンを下げることです。

[そのため、Android プロジェクトを作成する場合、互換性のある最小プロジェクトが非常に低い場合、例外が発生する可能性があるため、できるだけ最小バージョンを 4.0 以上にすることをお勧めします]

[新しい Android プロジェクトを作成するときに、最小バージョンが 4.0 未満を選択した場合、追加の appcompat_v7 プロジェクトが存在しますが、このプロジェクトはエラーを報告し、他のエラーや例外などが発生する傾向があります。]

  1. コンピューターに複数の Android 開発環境が含まれている場合、複数の DDMS が存在し、起動時にポート占有の例外がスローされる場合があります。解決策は次のとおりです。

    プロジェクトを実行すると、Eclipse によってプロンプト ボックスが表示されます。「選択した VM デバッグ ポート (8700) を開けませんでした。DDMS または Eclipse プラグインの別のインスタンスが実行されていないことを確認してください。他のもので使用されている場合は
    、環境設定で新しいポート番号を指定してください。」

     	在终端输入:netstat -ano | findstr "8700"
    
     		未找到占用端口。
    

解決:

Eclipse で、以下に示すように、[ウィンドウ] -> [設定] -> [Android] -> [DDMS] を順に開きます。

Base ローカル デバッガー ポート 8600 を 8601 に変更し、Use ADBHOST をオンにします。

  1. アイコンの問題、hdpi-72px 72px、mdpi-48px 48px、xhdpi-96px 96px、xxdip-144px 144px

  2. android switch(String)错误:1.7 未満のソースレベルでは String 型の値をオンにできません

switch文の判定条件はint、byte、char、shortが受け付けられますが、それ以外の型は受け付けられません。Stringは
JDKバージョン1.7以降のみサポートします。

この問題は、次のように設定することで解決できます。 (JDK1.7 バージョンがない場合は、ダウンロードしてインストールできます)
メニュー オプション – 「プロジェクト」->「プロパティ」->「Java コンパイラー」->「コンパイラー準拠レベル」: 1.7 を選択します。

  1. Android プログラムのデバッグ時: プロンプトの問題が発生しました New_configuration の起動中に内部エラーが発生しました

解決策:
ステップ 1: [実行/デバッグ設定] ウィンドウに入ります。実装方法は 2 つあります: 1. プロジェクト -> プロパティ -> 実行/デバッグ設定:

[実行/デバッグ設定] ウィンドウは次のとおりです。

ステップ 2: 上の図で New_configuration を選択した後、「削除」をクリックして削除します。

ステップ 3: プロジェクトを再度クリーンアップすると、OK になります。

成功するには「OK」をクリックします。

  1. 電話機をコンピュータに接続し、USB デバッグをオンにすると、ADB インターフェイスのインストールが失敗したか、Android ドライバのインストールが失敗したというエラーが報告されます。
  • 【win7】

    [Win7 システムのインストール プロセスで「指定されたファイルが見つかりません」というプロンプトが表示される (13.01.23 の新規ケース)]

    Win7 システム ユーザーは、adb ドライバーをインストールするときに「システムが指定されたファイルを見つけることができません」という問題に何度か遭遇しました。実際の理由は、システムは adb ドライバーをインストールするときにシステムに付属の winusb ドライバーをインストールする必要があるためです。 winusb に必要な winusb.sys ファイルは、inf ファイルの "windows cd" フィールドに基づいてコピーされます。場合によっては、システムが "windows cd" の場所を認識できないため、実行中に winusb.sys ファイルが不足します。インストールプロセスが進行し、インストールが停止します。

    1. 解決策:
      winusb "c:\windows\system32\DriverStore\FileRepository\winusb.inf_x86_neutral_6cb50ae9f480775b\" ディレクトリのソース パスを見つけて、Winusb.sys ファイルを "c:\windows\inf" ディレクトリにコピーします。取り付けには問題ありません。

    2. 【解決策 2】: Driver Wizard などのソフトウェアを使用して ADB ドライバーをインストールします。[ドライバーをインストールするときは、USB オプションを充電のみに設定する必要があります。

       						(例如:)类型:安卓
       								名称:USB Composite Device
       								制造商:Android
       								设备描述:USB Composite Device  【Android usb 混合驱动】
      
       		 或者 直接 下载安装 对应手机型号的 adb 驱动。
      
       	【Window-->ShowView--->Device --> 就可以查看当前可用的设备了】--[尝试打开或关闭 usb选项媒体设备,可以刷新 Device]
      
       	【然后选择runConfiguration-->Always prompt to pick device(每次运行总是提示选择设备)】
      
  • [xp]
    [ADBドライバーをインストールできない場合、原因はいくつかあり、解決策も異なります。発生する問題のほとんどは Windows XP システムであるため、ここではすべての Windows XP を例として使用します。

    1. 同じ WDF バージョンがシステムにすでに存在しているため、ADB ドライバーのインストールに失敗します。

    この種の状況は最も一般的で、コンピューターに既に同じ WDF バージョンがあり、関連するアンインストール項目が不足している場合にこの問題が発生し、コンピューターがインストール中に致命的なエラーを表示します。

解決策:
  a. 関連するバージョンのアンインストール項目を追加し、wdf1005 バージョンを例として、レジストリのアンインストール項目をインポートします。次に、ADB ドライバーを再インストールします。

	  b. 升级到一个更高版本的ADB驱动也能够解决这个问题。

2. システムに暗号化サービス サービスがないため、ADB ドライバーのインストールが失敗します。

少数の XP システムでは、暗号化サービス サービスがないためにドライバーの最終インストールが失敗します。これは、wdf ドライバーのインストールが暗号化サービスに依存しているためです。

解決策:
   サービスのレジストリ キー値をインポートし、コンピューターを再起動して、ADB ドライバーをインストールします。

3. 中国農業銀行オンライン バンキングの U-KEY と競合しているため、ADB ドライバーのインストールが失敗します。

Android ADB ドライバーをインストールすると、一部のオンライン銀行の U-KEY と競合するため、adb インターフェイス ドライバーのインストールに失敗し、エラー 10 が表示されます。

解決策:
    最初にオンライン バンキングに関連する関連ファイルとサービスをアンインストールしてから、ADB ドライバーを再インストールすることのみ可能です。

4. 電源不足によるADBドライバーの異常により、ADBドライバーがインストールできなくなる

一部のデスクトップでは、前面 USB ポートからの電力供給が不十分なため、adb インターフェイスに黄色の感嘆符が表示されます。

解決策:
   携帯電話のデータ ケーブルをメイン ボックスの背面 USB インターフェイスに接続し、電力を十分に安定させてから、ADB ドライバーを再インストールします。

  1. コンテンツを追加する前に estFeature() を呼び出す必要があります

原因: Android.util.AndroidRuntimeException: requestFeature() はコンテンツを追加する前に呼び出す必要があります
Android で android.hardware.Camera を呼び出してカメラ機能を完了しましたが、このような例外が発生しました。

setContentView(R.layout.main);
requestWindowFeature(Window.FEATURE_NO_TITLE);

解決策は次のとおりです。順序を変更します。

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.main);

--------------------【したがって、 this.requestWindowFeature(); メソッドは this.setContentView(); メソッドよりも前に記述する必要があります】 ------- - -------------

質問 2:
コンテンツを追加する前に requestFeature() を呼び出す必要があるというエラーを解決してください

Android 实现画面全屏(取消标题、取消状态栏):

  //取消标题
  this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  
  this.setContentView(R.layout.logo); //Activity样式文件,一定要写在中间

  //取消状态栏
  this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:background="@color/white"
    >

    <ImageView 
    android:id="@+id/logo" 
    android:src="@drawable/logo_bg"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    
    />
    
</LinearLayout>

java.lang.RuntimeException:Unable to start activity ComponentInfo
_
这是因为:

java的执行顺序有关!目前遇到的这个问题就是因为在系统运行开始的时候就已经调用父类的构造方法,接着调用setContentView方法展示视图界面。R.layout.main是R.java资源类中的一个属性。当你在调用这个方法之后在声明Widget就会报:android.util.AndroidRuntimeException: requestFeature() must be called before adding content

所以前面的那三句中加载Activity的样式的那句代码一定要写在中间。

9. Android 開発における java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPointerException エラーの一元的な原因と解決策

エラー メッセージ文字列: java.lang.RuntimeException: アクティビティを開始できません ComponentInfo{com.first/com.first.Game}: java.lang.NullPointerException

一般に、このエラーは、Activity onCreate() メソッドの setContentView(XXX) で発生します。インターネット上では多くの原因が考えられますが、おそらく 4 つの重要な理由が考えられます。

理由 1: xxx のエラー、それが R.layout.main の場合、main.xml ファイル内のタグの使用が間違っているはずですコンパイラーがプロンプトを表示しない最も一般的なエラーは、android:name の混同です。 main.xml のタグがすべて正しいかどうかをよく確認してください

理由 2: requestWindowFeature() メソッドは setContentView(view) メソッドの後に使用されており、次のエラーにより、requestFeature を setContentView の前に使用する必要があることが示されます。問題を解決するには、requestWindowFeature() メソッドを setContentView(view) メソッドの前に置くだけです。

理由3: onCreate()メソッドの外で、どのメソッド本体にも属さない、コントロールにfindById(R.id.xx)を直接与えることで発生します。findById(R..id.xx)を実行する必要があります。 )を解決できます

理由 4: setContentView(view) の前にビューがインスタンス化されていないが、ステートメントによって直接 setContentView(view) が発生しているため、setContentView(view) を呼び出す前にメソッド内でビューがインスタンス化されているかどうかをよく確認してください。

理由 5: null ポインター エラー例外のため、Spinner や list などに値があるかどうかを確認する必要があります。

  1. エラー解決: java.lang.SecurityException: アクセス許可の拒否 [アクセス許可が拒否されました]

[このエラーは、別のアプリケーションがプログラムのアクティビティを呼び出すときに発生することがあります]:

java.lang.SecurityException: 権限拒否: ProcessRecord{4456781 1644:com.siveco.bluebee.project からのインテント { cmp=com.siveco.bluebee.phone.supervisor/com.siveco.bluebee.core.activity.GetServerAddressActivity } を開始しています。 Productionフィードバック/10056} (pid=1774、uid=10056) は uid 1044 からエクスポートされませんでした

このエラーは次のコードに起因します。

if (APPTools.checkAPP(this.getApplicationContext(), BBA_PACKAGENAME)) { インテント インテント = new Intent(); tent.setClassName(BBA_PACKAGENAME, “com.siveco.bluebee.core.activity.GetServerAddressActivity”); startActivityForResult(意図, REQUEST_CODE);


}

解決策: アクティビティで属性 exported="true" を構成できます。


  1. 例外情報: adb をリセットする必要があります。
    解決策: DDMS –> [デバイス] ウィンドウの小さな逆三角形をクリックし、[adb のリセット] を選択します。

  2. new View.OnClickListener(){} タイプのメソッド onClick(View) はスーパークラスをオーバーライドする必要があります

    mButton1.setOnClickListener(new Button.OnClickListener()
    { @Override public void onClick(View v) { // TODO 自動生成メソッド スタブmTextView1.setText(“Hi,Everyone!!”); } });






上記のコードは次のようにエラーを報告します。

  • android.view.View.OnClickListener.onClick を実装します
  • new View.OnClickListener(){} タイプのメソッド onClick(View) はスーパークラスをオーバーライドする必要があります

調べてみるとjdkのバージョンの問題であることが分かり、プロジェクトのプロパティ→javaCompilerのコンパイラ準拠レベルを1.5から1.6に変更できるようになりました。

なぜなら、[jdk1.6 の場合のみこのように記述できます。それ以外の場合は、@Override を記述できません。1.6 より前のインターフェイスでメソッドを実装する場合、@Override はサポートされていないためです。]

  1. SQLite データベースを使用する場合: android.database.sqlite.SQLiteException: データベースをバージョン 2 から 1 にダウングレードできません

    解決策: このデータベースはすでに存在しており、バージョンは 2 です。バージョン 1 を使用して操作すると、問題が発生します。

          你要是没改数据库就用2,改了就增加1,写成3.
    
  2. プログラム実行時 ----【アクティビティは開始されていません。現在のタスクが前面に表示されています】

実行中メッセージ:【アクティビティは開始されていません。現在のタスクが前面に出されています。】。

理由分析: シミュレーター内でまだ実行中のものが存在するため、つまり、実行したいアクティビティの 1 つが既にシミュレーター内で実行されているためです。エミュレータがデスクトップに終了した後は、何も実行されていないと考えないでください。デバッグ時に異常終了したプログラムでは、アクティビティが実行されている可能性があります。

説明: これは Android プラットフォームのバグではありませんが、Android 自体がそのような処理メカニズムです。

Android プラットフォームでは、戻るボタンやプログラム自体の終了操作によってプロセスを終了すると、実際には Android 仮想マシンがプロセスを終了しないことがあります。

メモリに余裕がある場合、このプログラムは Android 仮想マシンにキャッシュの形で保存されます。メモリが不足している場合にのみ、Android システムは長期間アクティブ化されていないタスクをクリーンアップします。

他のプログラムにメモリを提供します。

Android は、次回このプログラムをより迅速に起動できるようにこれを行います。

したがって、プログラムがまったく変更されておらず、メモリが十分であるため、大家的な状況が発生します。前回実行されたプログラムは、キャッシュされた状態からタスクスタックの先頭に直接配置され、プログラムが再度実行されます。引き続き実行できます。

解决方法一: 退出目前执行的程序。。

解决方案二: project--->clean , 让程序重新编译一下就行
  1. コマンドラインで adb、ddms、sqlite などのコマンドを使用する場合: save xxx は内部コマンドでも実行可能ファイルでもありません。

解決策: SDK インストール ディレクトリの下に platform-tools ディレクトリがあり、その場所は path システム変数で構成されます。

  1. テキストメッセージを聞く
要使自己写的android程序能够收到短信息来临的广播,则不管是在java程序中注册broadcastReceiver还是在manifest.xml中注册,在manifest.xml文件中必须添加一句代码:

また、このコードはアプリケーションと同レベル、つまりマニフェストの直接のサブタグとなっており、文を変更しないとプログラムにブロードキャスト受信を登録してもSMSは受信されません。

[また、パーミッション登録ステートメントは、アプリケーション タグの後ではなく、前に記述する必要があります。そうしないと、「パーミッション拒否: インテント { xxx} を受信して​​います」という警告がスローされます]

  1. eclipse [SDKマネージャー] 「xcopy」は内部コマンドまたは外部コマンド、操作可能なプログラムとして認識されません。

Eclipse は SDK マネージャーを起動し、次のエラーを報告します: [SDK マネージャー] 'xcopy' は内部コマンドでも外部コマンドでも、実行可能なプログラムでもありません。
解決策として、C:\WINDOWS\system32 をパス環境変数に追加するか、C:\WINDOWS\system32\xcopy.exe を Android SDK ディレクトリ下のツールにコピーして、正常に実行します。

  1. Android 開発エラー: tools\android.bat の実行に失敗しました (または: SDK Manager.exe の実行に失敗しました) 解決策:

解決策は次のとおりです。

1. sdk ディレクトリの下で、データを一時的に保存するために使用される te​​mp フォルダーを見つけます。

2. temp フォルダーで tools_r24.1.2-windows.zip、または他の tools_r***-windows.zip (最新のものを選択することをお勧めします) を見つけ、解凍して tools フォルダーを取得します。

3. 解凍したツール フォルダー (中に android.bat が入っている) のすべての内容を独自のツール フォルダー、つまり sdk/tools にコピーすれば完了です。


20. SDK Manager を開くと、新しいバージョンの API がないか、表示が不完全であることがわかります。その後、Android SDK ツールの更新を検討してください。SDKManager で引き続き更新できます。

  1. Windows のコマンド ラインで adb と入力すると、どちらも内部的なものではないことがわかります。それもありません。:

    解決策:
    例: D:\Study_SoftWare\adt-bundle-windows-x86_64-20140702\sdk\platform-tools
    このディレクトリを環境変数パスに追加するだけです。

  2. Java ローカル内部クラスまたは匿名内部クラスを使用する場合、クラスがメソッドのローカル変数を呼び出す場合は、ローカル変数を Final キーワードで修飾する必要があります。そうしないと、コンパイル エラーが発生します。

別のメソッドで定義された内部クラス内の非最終変数 i を参照することはできません

解决方案:【在外部定义一个成员变量,用来存储局部变量的值,然后在匿名内部类中直接使用成员变量即可。】      
  1. サブスレッドでメイン スレッド インターフェイスを更新するときに例外が報告されます: android.view.ViewRoot$CalledFromWrongThreadException
    ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます

解決策 1: Android のハンドラー メカニズムを使用してサブスレッドで情報を送信し、メイン UI スレッドでメッセージを受信して​​処理します。

解決策 2: Activity.runOnUiThread(Runnable) を使用して
Runnable で ui を更新するコードを作成し、ui を更新する必要があるときに Runnable オブジェクトを Activity.runOnUiThread(Runnable) に渡します。このようにして、Runnable オブジェクトを ui プログラムで呼び出すことができます。

          FusionField.currentActivity.runOnUiThread(new Runnable()   
          {  
              public void run()  
              {  
                  Toast.makeText(FusionField.currentActivity, "Success",  
                          Toast.LENGTH_LONG).show();  
              }  
    
          });  
  1. [メインスレッドでネットワークにアクセスできません – android.os.NetworkOnMainThreadException 例外]

    解決策 1: 子スレッドでネットワークにアクセスします。- インターフェイスを更新する必要がある場合は、ハンドラーと組み合わせて実装できます。メインインターフェースはサブスレッドでは更新できないため]

    解決策 2: 非同期メカニズムを使用する
    ————————————————————————————————————————— ————————————————————————————————————————————————— ———————

  2. 衝突検出の問題

在项目中使用并映入 java.awt.Rectangle类后,编译正常,但运行时抛出:

        java.lang.NoClassDefFoundError: java.awt.Rectangle


    原因:Android 底层不支持 java.awt 与,Swing,因此即使编译通过,但运行时会报错    


解决办法一:使用安卓自带的 Rect类,它直接提供了intersects方法,可以用于碰撞检测

解决办法二: 查看JDK的Rectangle源码,把构造方法与 intersects(MyRectangle r) 提取到我的 MyRectangle工具类中。
           --经检测正常可用
              
解决办法三:自己编写碰撞检测API   

————————————————————————————————————————————————— —————————————————————————————————————————————

  1. : onCreate(); メソッドで、コントロール オブジェクト (findViewById) の参照を取得した後、リスナーを設定するときにエラーが見つかりました: 原因: java.lang.NullPointerException

    解决方案:1.查看find控件之前,有没有为Activity设置 this.setContentView(); 如果没有设置则会抛出空指针异常.
    

————————————————————————————————————————————————— ————————————————————————————————————————————————— ———————————————

  1. Eclipse Android 開発中に、一部のクラスにソース コードがないことが判明した場合 (Ctrl + マウスの左ボタン)、ソース コードを表示できません。

    解決策: エラー ページで、[ソースを添付] をクリックします。次に、ソース コードのフォルダーを選択します。

    例:D:\Study_SoftWare\adt-bundle-windows-x86_64-20140702\sdk\sources\android-19 即可

  2. 発生したバグ 1:-----【BaseAdapter アダプタを使用すると、Bean コレクションは正常ですが、データを表示するとすべての項目が同じデータを表示します】-----

【解決方法】:
Bean コレクションを満たすデータの取得メソッドで、前の Bean オブジェクトを繰り返し追加するのではなく、データごとに Bean オブジェクトが作成されているかどうかを確認してください。
それから

            【getView方法中 设置子控件内容时用:beans.get(position); //来获取指定位置的Bean对象,然后设置子控件内容 】

                            且记:此处不能使用循环遍历的方式设置子控件内容

[要約]: 1. まず、データの一部が Bean オブジェクトに対応していることを確認します (前の Bean オブジェクトを繰り返し追加するのではなく)。 2. 次に、
Bean を取得するために、Beans.get(position) メソッドを使用する必要があることを確認します。 (Bean コンテナをループする代わりに) サブコントロール オブジェクトのコンテンツを設定します。

  1. ListView(AdapterView)のデータを更新するときに呼び出します:adapter.notifyDataSetChanged(); [更新失敗が見つかりました]

    解決策: AdaptorView に渡されるリスト ポイントは変更できません。最初から最後まで同じメモリを指す必要があります。そうしないと、リフレッシュ エラーが発生する可能性があります。

  2. java.lang.RuntimeException: setOnItemClickListener はスピナーでは使用できません。

    これは、スピナーが OnItemClickListener の実装を AdaptorView で書き換えるため、スピナーがサポートしていないことを意味します。

    [setOnItemSelectedListenerで置き換え可能]

  3. cmdコマンドラインウィンドウでクエリしたデータ情報を表示すると文字化けが発生しますか?

    まず、AndroidのSQLiteDataBaseはデフォルトでUTF-8を使用しており、コマンドラインウィンドウで使用するエンコード方式がUTF-8でない場合、文字化けが発生する可能性があります。

    解決策: コマンド ライン ウィンドウ (現在のコード ページ) のエンコード方法を変更して、データベース内のデータのエンコード方法と一致するようにします。

            使用命令:chcp   936         -----修改成GBK
                             950         -----修改成繁体中文(Big5) 
                             932         -----修改成日文
                             437         -----修改成英文
                             65001       -----修改成UTF-8
    
  4. ContentProvider の使用時に見つかりました: java.lang.SecurityException: Permission Denial: プロバイダーを開いています

解決策: AndroidManifest.xml の ContentProvider の定義に android:exported="true" を追加します。

  1. ContentProvider の使用時に見つかりました:
    java.lang.IllegalStateException: 接続プールが閉じられているため、この操作を実行できません。

    解決策: ContentProvider で公開されているメソッド (query(…); など) を確認します。 Cursor に戻る前に、データベースまたはカーソル オブジェクトが閉じていますか?

        如果关闭了,则取消关闭即可。【因为要返回cursor对象给调用者使用,因此不能调用 db.close(),或cursor.close() 】             
    
  2. Mediaplayer には字幕コントローラーがすでに設定されている必要があります MediaPlayer+SurfaceView を使用してビデオを再生すると例外が発生し、音声はありますが画像が表示されません。

解決策: 1: Android5.1 が正常に動作することをテストした後、このプログラムを実行するために Android4.4 kitkat を使用しないでください。

  1. SVN クライアントを使用してワークスペース フォルダーを SVN サーバーに関連付けた後、ワークスペース フォルダーに小さな緑色のチェックマークがないことがわかります。

    解決策: [タスク マネージャーに入って、まずエクスプローラー プロセスを強制終了してから、エクスプローラー プロセスを開始します]

  2. ADB は起動に失敗し、エラー ログがスローされます (そして、reset adb 関数を使用しても役に立ちません)。

    'ADB サーバーは ACK を受信しませんでした
    [2017-02-09 14:29:14 - adb] * デーモンの起動に失敗しました *
    [2017-02-09 14:29:14 - ddms] '…\sdk\platform-tools\ adb.exe,start-server' が失敗しました – 必要に応じて手動で実行してください

    解決策: コンピューターのタスク マネージャーに直接移動し、すべての adb プロセスを強制終了し、adb を再起動します。

  3. Gradle の「マニフェストにはプレースホルダーの置換が必要です」エラーが発生しましたが、manifestPlaceholders は値を提供しています

詳細は以下のとおりです。

  AndroidManifest.xml:89:16 Error:
    Attribute uses-library#com.company.platform.${encoding}@name at AndroidManifest.xml:89:16 requires a placeholder substitution but no value for <encoding> is provided.
/Users/Company/Desktop/Checkout/android/Project/app/src/main/AndroidManifest.xml:0:0 Error:
    Validation failed, exiting

この問題は通常、AndroidManifest.xml ファイルに mate-data を追加し、コンパイル エラーが発生したときに発生します。

解決:

进入 app.gradle 

    然后在 app.gradle 文件中: 为 mate-data 注入值!
      productFlavors{
        productFlavors.all{
                  flavor->
                      Map<String,Object> map=new HashMap<String,Object>()
       
                      map.put("encoding",encoding)
          
                      flavor.manifestPlaceholders.putAll(map)
          }
        }

  You need to just add to the array. You are replacing it. Do this:

  manifestPlaceholders = [encoding: "some value", version: cityVersion]
  By declaring manifestPlaceholders twice for the same flavor/build type, your are replacing the previous one. After the previous one got replaced, your build failed because the property no longer exists.
  1. BaseApplication はパッケージ化されていますが、BaseApplication.getAppContext() を呼び出すと実際には null を返します。
public class BaseApplication extends Application {
    
    

    private static Context mContext;

    @Override
    public void onCreate() {
    
    
        super.onCreate();
        mContext = this;
    }

    public static Context getAppContext() {
    
    
        return mContext;
    }

    @Override
    public void onTerminate() {
    
    
        super.onTerminate();
        mContext = null;
    }
}

解決策:
AndroidManifest.xml ファイルのノードで android:name=".base.BaseApplication" が構成されているかどうかを確認してください。

  1. strings.xml の書式設定プレースホルダー エラーを解決します: 非位置形式で複数の置換が指定されています

例: ゲーム %s、作成者: %s

確認したところ、string.xml 内の %s がコンパイルの失敗の原因であることが判明したため、%s を %position$s の形式に変更する必要があります。

つまり、次のように変更します: ゲーム %1 s、作成者: s、作成者: %2s 、著者: s できます

おすすめ

転載: blog.csdn.net/UserFrank/article/details/129298070