Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:从异步任务返回_Java_Android_Android Asynctask - Fatal编程技术网

Java Android:从异步任务返回

Java Android:从异步任务返回,java,android,android-asynctask,Java,Android,Android Asynctask,请注意:我已经阅读了其他相关问题。 我有一个DatabaseCall类,其中包含检索特定数据的函数。我在下面添加了代码,在这里我可以简单地得到所有问题等 我将从一个testActivity.class调用它,这样我就可以填充一个列表,但是因为这是异步的,所以我不能从onPostExecute返回任何内容。以前我在活动中调用过它,但是我的代码变得太乱了 下面是DatabaseCall类的代码 public class DatabaseCalls { public List<Question

请注意:我已经阅读了其他相关问题。

我有一个DatabaseCall类,其中包含检索特定数据的函数。我在下面添加了代码,在这里我可以简单地得到所有问题等

我将从一个
testActivity.class
调用它,这样我就可以填充一个
列表
,但是因为这是异步的,所以我不能从
onPostExecute
返回任何内容。以前我在活动中调用过它,但是我的代码变得太乱了

下面是DatabaseCall类的代码

public class DatabaseCalls {

public List<Question> getTestQuestionsFromDatabase(){
    class LoginAsync extends AsyncTask<String, Void, String>{

        private Dialog loading;

        @Override
        protected List<Question> onPostExecute(String s){
            loading.dismiss();
            Log.d("PostExecute", "JSON!: " + s);
            try{
                JSONObject jObj = new JSONObject(s);
                boolean error = jObj.getBoolean("error");

                List<Question> listQuestions = new ArrayList<Question>();

                if (!error){ 
                    for (int i=0; i<11; i++){
                        JSONObject question = jObj.getJSONObject(Integer.toString(i));
                        Question qObj = new Question(Integer.parseInt(question.getString("questionID")), question.getString("question"), Integer.parseInt(question.getString("answerID")), Integer.parseInt(question.getString("complexityID")));
                        listQuestions.add(qObj);                                    
                    }     
                    return listQuestions;
                }else{
                     String errorMsg = jObj.getString("error_msg");
                     /**
                      * Can't toast here because it is a helper class - it isn't
                      * an activity - need to return an empty object instead?
                      */
                     //Toast.makeText(getApplicationContext(),errorMsg, Toast.LENGTH_LONG).show();
                }
            }catch(JSONException e){
                e.printStackTrace();
            }               
        }

        @Override
        protected String doInBackground(String... params) {
            String s = params[0];
            BufferedReader bufferedReader = null;
            try {
                URL url = new URL(AppConfig.Questions_URL + s);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                con.setRequestProperty ("Authorization", "Basic Z2FycmV0dGg6ZnJBc3Rpbmc0");
                bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                //This string is returned to the onPostExecute
                String result;                    
                result = bufferedReader.readLine();
                return result;
            }catch(Exception e){
                Log.d("Exception in try", "Exception" + e.toString());
                return null;
            }
        }           
    } 
    LoginAsync la = new LoginAsync();
    la.execute();
}}
公共类数据库调用{
公共列表getTestQuestionsFromDatabase(){
类LoginAsync扩展了AsyncTask{
私有对话框加载;
@凌驾
PostExecute上的受保护列表(字符串s){
loading.dispose();
Log.d(“PostExecute”,“JSON!:”+s);
试一试{
JSONObject jObj=新的JSONObject;
布尔错误=jObj.getBoolean(“错误”);
List listQuestions=新建ArrayList();
如果(!error){

对于(int i=0;i您是否试图使您的AsyncTask阻塞?如果AsyncTask阻塞,那么首先使用AsyncTask有什么意义?对不起,我不明白。我是android新手,我了解到异步任务是调用服务器的最佳方式。@MattiVirkkunenYes,但如果您试图绕过我所说的,则使用它没有意义这实际上是要做的。您需要安排它,以便在服务器调用完成后,您希望在
onPostExecute
中执行的任何操作或从中调用的任何操作。因此,我希望服务器调用的响应返回到另一个活动@mattivirkkunen调用数据库中的
getTestQuestions
的位置。您真正需要我做什么这是一个来自
AsyncTask
的回调,用于将结果传递给感兴趣的任何人。