gpt4 book ai didi

java - 如何在类之间异步发送数据?

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

我需要知道该怎么做?

我有两种观点

  • ActivityMain.java
  • 电影 Activity

在 MainActivity 中,我创建了一个从第二个 View 获取一些信息的 Intent :

 @Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);

CustomGridviewAdapter customGridviewAdapter = new CustomGridviewAdapter(filmList, getApplicationContext());
simpleGrid.setAdapter(customGridviewAdapter);
simpleGrid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(getApplicationContext(), FilmActivity.class);
intent.putExtra("FilmBoster", filmList.get(position).getBackdrop_path())
.putExtra("FilmImage", filmList.get(position).getPoster_path())
.putExtra("FilmName", filmList.get(position).getTitle())
.putExtra("FilmDate", filmList.get(position).getRelease_date())
.putExtra("FilmDisc", filmList.get(position).getOverview())
.putExtra("isFavFilm", filmList.get(position).getIsLiked());
startActivityForResult(intent, 2);
}
});
}

第二个 View :

 private void sendDataToMainActivity(String isPressed) {
Intent intent = new Intent();
intent.putExtra("isPressed" , isPressed);
setResult(1 , intent);
finish();
}

我在MainActivity中使用了AsyncTask。第二个 Activity 在 onActivityResult 中发送数据,但 ( onActivityResult ) 在 AsyncTask 之后执行,并且在 AsyncTask 中,我在 DB 上设置了一些数据。这样第二个Activity返回的数据就等于null。

一些有帮助的代码

 @NonNull
private String convertToString(InputStream in) {
String res = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder sd = new StringBuilder();
try {
while ((res = reader.readLine()) != null) {
sd.append(res).append("/n");
}
} catch (IOException e) {
e.printStackTrace();
}
parseString(sd.toString());
db.userDao().updateFilmList(filmList);
return sd.toString();
}

private void parseString(String json) {
try {
JSONObject jsonObject = new JSONObject(json);
JSONArray jsonArray = jsonObject.getJSONArray("results");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject filmObject = jsonArray.getJSONObject(i);
Film film = new Film(filmObject.getString("title")
,filmObject.getString("overview")
, filmObject.getString("poster_path")
, filmObject.getString("release_date")
,db.userDao().getIsFave());
filmList.add(film);
}

} catch (JSONException e) {
e.printStackTrace();
}

}

这是AsyncTask内部将数据保存到db的两个方法

如果我想将数据返回到AsyncTask并设置到DB上,该怎么办?

最佳答案

在 MainActivity 类的 onCreate 或 onResume 方法中执行以下操作:

    // filmList should be an empty array at this point
CustomGridviewAdapter customGridviewAdapter = new CustomGridviewAdapter(filmList, getApplicationContext());
simpleGrid.setAdapter(customGridviewAdapter);
simpleGrid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(getApplicationContext(), FilmActivity.class);
intent.putExtra("FilmBoster", filmList.get(position).getBackdrop_path())
.putExtra("FilmImage", filmList.get(position).getPoster_path())
.putExtra("FilmName", filmList.get(position).getTitle())
.putExtra("FilmDate", filmList.get(position).getRelease_date())
.putExtra("FilmDisc", filmList.get(position).getOverview())
.putExtra("isFavFilm", filmList.get(position).getIsLiked());
startActivityForResult(intent, 2);
}
});

然后,在 postExecute 方法中,您只需执行以下操作(假设您已在异步任务中重新填充 filmList):

    CustomGridviewAdapter customGridviewAdapter = new CustomGridviewAdapter(filmList, getApplicationContext());
simpleGrid.setAdapter(customGridviewAdapter);

onItemClicked 处理程序会将单击的项目发送到 FilmActivity.java 类 Activity 。在该 Activity 的 onCreate 中,您需要读取从 MainActivity 传递给它的数据:

 public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.film_activity_layout);

FilmName = (String) getIntent().getExtra("FilmName");

...
}

您需要显示 MainActivity 中的 onActivityResult 代码

关于java - 如何在类之间异步发送数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57824532/

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