最初のAndroidプロジェクトで発生した問題


最近1つのプロジェクトを完成して、練習の
https://github.com/Kuanghusing/Weather
progressDialog
progressDialog  = ProgressDialog.show(context,title,msg)//context onCreate() getActivityContext()  

簡単そうに見えますが、私の能力は菜鳥レベルで、多くの問題に直面しています.
Error : BinderProxy@45d459c0 is not valid; is your activity running?

このErrorをトリガするのは、Activityに入ってから->Backキーを押す->Activityに戻ってからこのメソッドを呼び出すのです
http://stackoverflow.com/questions/7811993/error-binderproxy45d459c0-is-not-valid-is-your-activity-runningこれはstackOverflowの解決策です.
if(!((Activity) context).isFinishing())
{
    //show dialog
}

試してみたところ無効…何の問題があるのかわからず、後で解決します
結果を返すサブスレッドが必要
UI操作について
Handle.sendMessage(msg)

または
Handler handler = new Handler(Looper.getMainLooper()); Handle.post(runnerable)

実は同じ方法で、ただ方法がカプセル化されています
返された結果の処理
例えばNavigationViewのonNavigationItemSelectedListened()を初期化する
これは で完了する必要がありますが、最初に書いたときは注意していませんでしたが、メインスレッドで結果を処理し、(メインスレッドはいつ結果を返すか分かりません)長い道のりを回ってやっと問題を発見しました
url符号化
address.replaceAll(" ", "%20").replaceAll("\"", "%22");

urlは符号化が必要でgetメソッドurlで中国語が含まれる場合、API 23では符号化は不要であり、API 19では
URLEncoder.encode(city_name, "UTF-8");

でもURLEncoderをそのまま使うとencode()メソッドがURLに転送されるとhostという奇抜な問題が認識されず,材料を調べて符号化基準が発見される.
Menu
toolbar上のメニュー(ボタン)登録Clickイベント呼び出す
toolbar.setOnMenuItemClickListener();

再書き込みonMenuClick()メソッドtoolbarの一番左のアイコン(戻りキーまたはその他)ActivityのonOptionsItemSelected()メソッドを上書きする必要があります
ArrayAdapter
Adapterにデータの更新を通知したい
adapter.notifyDataSetChanged()

なお、インスタンス化adapter YesのListにコンテンツを再割り当てすることはできません.例えば、dataList=getList()adapterは元のdataListのアドレスを特定し、アドレスが変更されるとデータを更新できません
データベース#データベース#
データベースを新規作成SQLiteOpenHelperから継承するクラスを新規作成するデータベースを処理するクラスを新規作成する
public synchronized static WeatherDB getInstance(Context context) {
        if (weatherDB == null) {
            weatherDB = new WeatherDB(context);
        }
        return weatherDB;
    }

dbインスタンス化オブジェクトが1つしかないことを保証
こうりつもんだい
一度に多くのデータを挿入する場合、contentValuesは同じフィールドに異なる値を与えることができません(少し不合理だと思いますが、sql構文では一度に複数のレコードをinsertできますか)ループを使用すると効率的な問題が発生します.トランザクションマネージャを使用します.
try{
    db.beginTransaction()
//do db insert
    db.setTransactionSuccessfully()
}catch(){}
finally{
    db.endTransaction();
}