2017-08-01 30 views
1

我创建了一个程序,将通过PHP连接数据库并回一个响应。我的Android程序然后进行到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”功能我的主要活动中,并在该函数内,执行功能被读取,然后什么是应该发生的是returnauthor功能应该运行。但是,相反,什么都不会发生 主要活动代码:

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

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

如果任何人有,为什么这可能是任何建议发生,那将是非常赞赏如何解决它!

+1

执行AsyncTask

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

然后才显示progressDialog你有一个的AsyncTask,你不需要调用没有returnAuthor而是等到TAST放完返回字符串结果 –

+0

我可以在类中使用哪种类型的监听器? – RW6

回答

1

你似乎有大约AsyncTask误解。 AsyncTask的结果可能不会立即可用,因为后台任务可能尚未完成。

在完成后台任务后,您需要覆盖AsyncTask中的方法onPostExecute才能执行某些任务。

首先在onPostExecute:

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

好吗所以一旦我添加了onPostExecute功能和后台任务完成onPostExecute将会运行,然后那个时候我应该会返回一个字符串?然后如果是这种情况,我的主要活动代码在Asynctask在后台执行时会执行什么操作?有什么办法可以让主要活动等到后台可执行文件完成? – RW6

+0

您可能不想通过等待后台任务完成来冻结您的应用程序。您必须在'onPostExecute'中实现代码。这是回调工作的方式。 –

+0

好吧,我是相当新的Java环境,我一直在努力加入onPostExecute覆盖,但它不被认可。 doInBackground函数结束之后我做的:@覆盖 保护字符串onPostExecute(字符串结果){ 返回结果; }我错过了什么,有什么我只是没有抓住? onPostExecute是否必须返回布尔值,我想要做的就是在后台进程完成后返回字符串值!我被告知onPostExecute与doInBackground可执行文件冲突。 – RW6