2017-08-01 40 views
1

PHPを介してデータベースに接続し、応答をエコーバックするプログラムを作成しました。私のアンドロイドその後、プログラムはPHPファイルへの要求を行い、エコーを読み込む。クラス関数を呼び出した後にJavaコードが実行されない

public class Read_Author extends AsyncTask<String, Void, String> { 

    String authorName = ""; 


    @Override 
    public String doInBackground(String... params) { 

    try { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://localhost/scripts/read_information.php"); 
     HttpResponse response = httpclient.execute(httppost); 
     authorName = String.valueOf(EntityUtils.toString(response.getEntity())); 

     String myStr = "ANSWER"; 
     Log.v(myStr, authorName); 
    } 
    catch(Exception e){ 

    } 

    return authorName; 

} 

public String returnAuthor(){ 

    return authorName; 
} 

}

を私が正常にエコー文字列を取得し、著者名の文字列変数に入れて。しかし、私が主な活動から帰ってきた作家に電話しようとすると、エラーは出ませんが、コードは実行されません。

メインアクティビティ内で "readValue"という関数を呼び出し、その関数内でexecute関数が読み込まれると、returnauthor関数が実行されるはずです。しかし、その代わりに、何も 主な活動のコードを実行されません:

public void returnAuthor(){ 
    loadAuthor.execute(); 

    String a = loadAuthor.returnAuthor(); 
    Log.v("HIT ME", a); 
    } 

誰もがこれが起こって、どのように非常に理解されるようにそれを修正することができた理由についてどんな提案を持っている場合!

+1

にあなたはAsyncTaskを持ってAsyncTask

final ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.setMessage("Loading.."); progressDialog.setCancelable(false); progressDialog.show(); 

を実行する前に

最初のショーは、ProgressDialogはその後、あなたは何returnAuthorを呼び出していないが、代わりにTASTが完了するまで待つ必要があるといけません文字列の結果を返す –

+0

クラス内でどのようなリスナーを使用できますか? – RW6

答えて

1

あなたは約AsyncTaskについて誤解しているようです。バックグラウンドタスクが完了していない可能性があるため、AsyncTaskの結果はすぐには利用できない場合があります。

AsyncTaskonPostExecuteメソッドをオーバーライドして、バックグラウンドタスクが完了した後にタスクを実行する必要があります。 onPostExecute:

@Override 
protected void onPostExecute(String result) { 
    progressDialog.dismiss(); 
    Log.d("author", result); 
} 
+0

これで、onPostExecute関数を追加してバックグラウンドタスクが完了すると、onPostExecuteが実行され、それが文字列を返す必要があります。 Asynctaskがバックグラウンドで実行されている間に、私の主なアクティビティコードはどうなるでしょうか?バックグラウンドの実行可能ファイルが完了するまで、主なアクティビティを待たせる方法はありますか? – RW6

+0

バックグラウンドタスクが完了するのを待ってアプリケーションをフリーズさせたくない場合があります。 'onPostExecute'にコードを実装する必要があります。これがコールバックの仕組みです。 –

+0

申し訳ありませんが、私はかなりJava環境に新しいです、私はonPostExecuteオーバーライドを追加しようとしていますが、認識されていません。 doInBackground関数が終了した直後の処理:@Override 保護された文字列onPostExecute(文字列の結果){ 戻り値; }私が逃していることは何ですか、私はただ把握していないことがありますか? onPostExecuteはbooleanを返さなければならないのですか?バックグラウンド処理が完了したら、文字列値を返すだけです。私はonPostExecuteがdoInBackground実行可能ファイルと衝突していると言われています。 – RW6

関連する問題