gpt4 book ai didi

java - android studio中如何获取AsyncTask的返回值

转载 作者:行者123 更新时间:2023-12-01 16:15:06 25 4
gpt4 key购买 nike

你好,我知道有很多关于这个的帖子,但它太令人困惑了,我读了很多,但我无法解决一个简单的问题。我想要的只是从我的主要 Activity.kt 中获取一个类

val QuizzList = Network().execute(); (in main activity.kt)

我希望 QuizzList 成为我的类,而不是异步任务 blabla。

我需要在这里做什么才能使此任务返回QuizCollection(它是一个自定义类)?


package com.example.myapplication;

import android.os.AsyncTask;
import android.os.Build;

import androidx.annotation.RequiresApi;

import com.google.gson.Gson;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class Network extends AsyncTask<String, Integer, Object> {

static InputStream is = null;

static JSONObject jObj = null;
static String json = "";

// constructor
public Network() {

}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
protected QuizCollection doInBackground(String... params) {

try {
// On doit utiliser cet adresse URL, le 127.0.0.1 ne marche pas a cause du serveur qui
// Roule deja sur l'adresse.

//Get the content from the server
URL url = new URL("http://10.0.2.2:8080/api/quizz");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("Content-Type", "application/json");
con.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer content = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
Gson gson = new Gson();
JSONArray jsonArray = new JSONArray(content.toString());
System.out.println("Le content : "+content.toString());




QuizCollection quizz = new QuizCollection();
for (int i=0; i<jsonArray.length();i++){
System.out.println(jsonArray.get(0).toString());
Quiz quiz = gson.fromJson(jsonArray.getJSONObject(i).toString(), Quiz.class);
System.out.println("Titre "+quiz.Title);
quizz.addQuiz(quiz);
}


System.out.println("ca fonctionne?"+quizz.QuizArray.get(0).Title);

in.close();
return quizz;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Object page)
{
//onPostExecute
}

}



最佳答案

你应该使用回调

public interface OnTaskCompleted{
void onTaskCompleted(QuizCollection collection);
}

在您的 Activity 中:

//do whatever you want with collection which is the object returned from AsyncTask
Network(OnTaskCompleted { collection -> collection.toString() }).execute()

还有你的 AsyncTask:

public class YourTask extends AsyncTask<Object,Object,QuizCollection >{ 

private OnTaskCompleted listener;

public YourTask(OnTaskCompleted listener){
this.listener=listener;
}

// required methods

protected QuizCollection doInBackground(String... params) {
return new QuizCollection();
}


protected void onPostExecute(QuizCollection collection){
// your stuff
listener.onTaskCompleted(collection);
}
}

关于java - android studio中如何获取AsyncTask的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62420369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com