0

私はリモート呼び出しを行っていますが、この処理コードをどこに置くのが良いのか疑問に思っています:

        if ( result == null )
        {       
            Toast.makeText(getApplicationContext(), "Some error message", Toast.LENGTH_LONG).show();                                

        }
        else
        if ( result.equals( "all_problems_db_error" ))
        {
        Log.d( "AllBusinessesActivity" , "result: " + result )                                      
        }
        else
        {
            // Unwrap the stuff from the JSON string                
            String problem_title = null;
            String problem_id = null;

            try
            {
                JSONArray obj = new JSONArray(result);

                if ( obj != null )
                {
                    problems.clear();

                    for ( int i = 0; i < obj.length(); i++ )
                    {
                        JSONObject o = obj.getJSONObject(i);

                        problem_title = o.getString("problem_title");
                        problem_id = o.getString("problem_id");

                        Problem p = new Problem ( );
                        p.setProblemId(problem_id);                         
                        p.setProblemName(problem_title);

                        problems.add( p );
                    }

                    adapter.notifyDataSetChanged();             

                }                                   
            }
            catch ( Exception e )
            {
           // Do something :)
            }               
        }

onPostExecute() または最後または doInBackground() に入れる方が良いですか?

今は onPostExecute() で実行していますが、ときどき速度が遅くなることがあります。

誰かが私に違いを説明してもらえますか?doInBackground() でこれを行うと、 onPostExecute メソッドを持つ目的は何ですか?

4

2 に答える 2

2

このonPostExecuteメソッドは、UI スレッドで処理を行う必要がある場合に役立ちます。実際、メソッド内で UI を操作することはできませdoInBackgroundん。

そのため、すべての計算/データのダウンロードなどをdoInBackgroundメソッドで実行し、UI の操作のみをメソッドで実行するようにしてくださいonPostExecute

于 2012-06-12T18:08:45.220 に答える
0

Is it better to have it in the onPostExecute()

あなたの場合、UI コンポーネントの操作がないため、コードを に含めることができますdoInBackground()。しかしtoast、結果が のときにを表示しているので、結果nullをチェックインできますdoInBackground()。結果が null でない場合はresult、同じ関数で残りの処理を行うか、または を表示できる場所に渡すことがonPostExecute()できますtoast

at the end or doInBackground() はい。doInBackground()このメソッドは非 UI スレッドで実行されるため、このコードを最後に配置できます。これにより、発生する速度が確実に低下します。

doInBackground()これらのメソッドとの両方の違いはonPostExecute()、前者が非 UI スレッドで実行され、後者が UI スレッドで実行されることです。

And if I do this in the doInBackground() then what is the purpose of having the onPostExecute method

通常、doInBackground()は時間のかかる操作を実行するために使用されます。これらの操作には、Web サービスの呼び出しやサーバーからの画像のフェッチなどのアクティビティが含まれる場合があります。そのような場合 (サーバーから画像を取得する場合など)、その画像を画面 (UI) に表示する必要があります。これらのリソースをフェッチした後onPostExecute()、UI スレッドで実行されるため、UI を更新できる場所にデータを渡します。

この説明で疑問が解消されることを願っています。

于 2012-06-12T18:25:35.633 に答える