最初のAndroidプロジェクトで発生した問題
3320 ワード
最近1つのプロジェクトを完成して、練習の
https://github.com/Kuanghusing/Weather
progressDialog
簡単そうに見えますが、私の能力は菜鳥レベルで、多くの問題に直面しています.
このErrorをトリガするのは、Activityに入ってから->Backキーを押す->Activityに戻ってからこのメソッドを呼び出すのです
http://stackoverflow.com/questions/7811993/error-binderproxy45d459c0-is-not-valid-is-your-activity-runningこれはstackOverflowの解決策です.
試してみたところ無効…何の問題があるのかわからず、後で解決します
結果を返すサブスレッドが必要
UI操作について
または
実は同じ方法で、ただ方法がカプセル化されています
返された結果の処理
例えばNavigationViewの
これは
url符号化
urlは符号化が必要でgetメソッドurlで中国語が含まれる場合、API 23では符号化は不要であり、API 19では
でもURLEncoderをそのまま使うとencode()メソッドがURLに転送されるとhostという奇抜な問題が認識されず,材料を調べて符号化基準が発見される.
Menu
toolbar上のメニュー(ボタン)登録Clickイベント呼び出す
再書き込み
ArrayAdapter
Adapterにデータの更新を通知したい
なお、インスタンス化adapter YesのListにコンテンツを再割り当てすることはできません.例えば、dataList=getList()adapterは元のdataListのアドレスを特定し、アドレスが変更されるとデータを更新できません
データベース#データベース#
データベースを新規作成SQLiteOpenHelperから継承するクラスを新規作成するデータベースを処理するクラスを新規作成する
dbインスタンス化オブジェクトが1つしかないことを保証
こうりつもんだい
一度に多くのデータを挿入する場合、contentValuesは同じフィールドに異なる値を与えることができません(少し不合理だと思いますが、sql構文では一度に複数のレコードをinsertできますか)ループを使用すると効率的な問題が発生します.トランザクションマネージャを使用します.
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();
}