2016-06-21 10 views
0

Asynctaskでインテントを実行するとエラーが発生します。 ..Asynckタスクでアクティビティを開始するにはどうすればよいですか?

public class Livechat extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_livechat); 

    MyTask myTask = new MyTask(); 
    myTask.execute(); 

} 

private class MyTask extends AsyncTask <Void,Void,Void>{ 


    @Override 
    protected Void doInBackground(Void... params) { 


     Intent intent = new Intent(this, ChatWindowActivity.class); 
     intent.putExtra(ChatWindowActivity.KEY_GROUP_ID, "3"); 
     intent.putExtra(ChatWindowActivity.KEY_LICENCE_NUMBER, "7584151"); 
     startActivity(intent); 

     return null; 
    } 
    } 
} 
+2

インテントコンストラクタの最初のパラメータとして 'this'の代わりに' Livechat.this'を使用してください。 'Intent intent = new Intent(Livechat.this、ChatWindowActivity.class);' –

+0

@Mohammed KEY_GROUP_ID整数または文字列??? ......整数の場合はInteger ... Integerの場合整数... Integerとして送信する場合... –

答えて

0

AsyncTaskはActivityクラス内の別のクラスは、実際にある方法を示していますので、別のアクティビティに切り替えるにはActivityクラスのコンテキストを使用してくださいとして「この」「クラスMyTaskに」文脈を参照してください。 「this」の代わりに「Livechat.this」を使用してください。

 Intent intent = new Intent(Livechat.this, ChatWindowActivity.class); 
     intent.putExtra(ChatWindowActivity.KEY_GROUP_ID, "3"); 
     intent.putExtra(ChatWindowActivity.KEY_LICENCE_NUMBER, "7584151"); 
     startActivity(intent); 
0

あなたはdoInBackgroundで意図を開始する問題に直面する可能性があり、にテントを開始onPostExecute

@Override 
protected void onPostExecute(Void aVoid) { 
    Intent intent = new Intent(Livechat.this, ChatWindowActivity.class); 
    intent.putExtra(ChatWindowActivity.KEY_GROUP_ID, "3"); 
    intent.putExtra(ChatWindowActivity.KEY_LICENCE_NUMBER, "7584151"); 
    startActivity(intent); 
} 
0

エラーは、 "これは" として、ここでは動作しません

Intent intent = new Intent(this, ChatWindowActivity.class); 

このラインでありますあなたはAyncTaskにあり、これはAsyncTaskのインスタンスにのみなります。ここでLivechatを使用してください。これが有効です。

0

活動を起動して、いつでもこの例のようにonPostExecute」

気にいら `でこれらのタスクを実行する必要がありますので、他のUI更新タスクではなく、バックグラウンドタスクとしてUiThread上で実行する必要があります。

private class MyTask extends AsyncTask <Void,Void,Void>{ 

    @Override 
    protected Void doInBackground(Void... params) { 

    // Perfrom other actions that you want to get done before launching other activity. 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     Intent intent = new Intent(Livechat.this, ChatWindowActivity.class); 
     intent.putExtra(ChatWindowActivity.KEY_GROUP_ID, "3"); 
     intent.putExtra(ChatWindowActivity.KEY_LICENCE_NUMBER, "7584151"); 
     startActivity(intent); 
    } 
} 

が、あなたのケースでは、アクティビティを起動したい場合はAsyncTaskを使用しませんが、アクティビティを起動する前にいくつかのアクションを実行する場合は、doInBackgroundで実行できます。

欲しいのですが

+0

'this'を' Livechat.this'に置き換えてください。 –

+0

指摘してくれてありがとう! – Max

関連する問題