2017-06-03 8 views
-1

async tackを使用してアクティビティに値を表示することはできません。非同期タスクのためのコードは次のとおりです。 アクティビティにasynctask値を表示する方法

new BackgroundGetSignal(this).execute(); 
しかし、アプリケーションがクラッシュしている:

private class BackgroundGetSignal extends AsyncTask<String, Void, Void> { 
    private TextView name; 
    //private TextView latitudeField; 
    //private TextView longitudeField; 
    //private TextView placeName; 

    Double lat; 
    Double longit; 
    String addre; 
    MyService myService; 
    private Intent i; 
    private Context context; 

    public BackgroundGetSignal(Context context) { 
     this.context = context; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(String[] o) { 
     myService = new MyService(); 
     if (myService.canGetLocation()) { 
      lat = myService.getLatitude(); 
      longit = myService.getLongitude(); 
      addre = myService.getAddress(); 
     } 
     return null; 

    } 


    @Override 
    protected void onPostExecute(Void result) { 
     latitudeField = (TextView) findViewById(R.id.txtLatitude); 
     longitudeField = (TextView) findViewById(R.id.txtLongitude); 
     placeName = (TextView) findViewById(R.id.txtLocation); 

     latitudeField.setText(lat.toString()); 
     longitudeField.setText(longit.toString()); 
     placeName.setText(addre); 

    } 
} 

これは私がそれを呼ばれる方法でした。誰かが私が間違ったことを教えてください。

+0

あなたのisuueのエラーログを入れてください。 –

+1

投稿されたコードが正しくありません:TextViewsはコメントアウトされています。 AsyncTaskでうまく動作することをヒントにするには、** callback interfaces **を使用して、計算された値を 'onPostExecuted'に渡し、AsyncTaskを実行するクラスにそれらの値を渡して、渡された値を取得します。 –

+0

例外はありますか? – EKN

答えて

0

あなたがすべきことは、onPostExecute()メソッドでtry catchを与えて、uiの更新コードをtryブロックに移動することです。 onPostExecute()の実行時に、そのアクティビティがフォアグラウンドにない場合は、例外が発生する可能性があるためです。クラッシュログを投稿すると、問題の詳細な分析に役立ちます。

関連する問題