gpt4 book ai didi

java - Android:为什么这段代码不能在 onCreate 中运行,或者如何让它在没有线程的情况下工作?

转载 作者:行者123 更新时间:2023-12-02 02:40:04 25 4
gpt4 key购买 nike

当我将这段代码放入 Eclipse 中时,它可以正常运行,但由于某种原因,当我将其放入 Android studio 中 Activity 的 onCreate 方法中时,它不想执行。

这是代码:

public class ItemListView extends AppCompatActivity{
String itemURL;
int listSize;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item_list_view);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

Bundle itemData = getIntent().getExtras();
if(itemData==null){
return;
}

//Gets URL from search bar
itemURL = itemData.getString("itemURL");

try {
Document doc = Jsoup.connect("https://www.amazon.com/s/ref=nb_sb_ss_c_1_6?url=search-alias%3Daps&field-keywords=rx+390&sprefix=rx+390%2Caps%2C166&crid=2MTUBA4KGNY06").get();
String link = doc.select("h2#s-result-count").first().text();
System.out.println(link);
System.out.println(link.substring(1));
if (link.substring(1, 2).equals("-")) {
System.out.println("run1");
listSize = Integer.parseInt(link.substring(2, 3));
System.out.println(listSize);
try {
listSize = Integer.parseInt(link.substring(2, 4));
System.out.println(listSize);
} catch (Exception e) {
}
} else {
System.out.println("run2");
listSize = Integer.parseInt(link.substring(0, 1));
System.out.println(listSize);
try {
listSize = Integer.parseInt(link.substring(0, 2));
System.out.println(listSize);
} catch (Exception e) {
}
}
} catch (Exception e) {
}

System.out.println("listSize: " +listSize);
...
}
}

我需要 listSize 根据 URL 创建一个变量数组,但是当我打印该值以确保它正常工作时,它总是给我 0。我尝试使用 AsyncTask 在单独的 Java 类中运行代码,它可以工作,但是当代码在 onPostExecute 中执行时,已经太晚了,因为上面的类已经尝试初始化数组。

如有任何建议,我们将不胜感激,谢谢!

最佳答案

您需要的是一个回调来允许您初始化变量onPostExecute:

interface OnCallCompleteCallBack {
void onCallComplete(int listSize);
}

在您的AsyncTask中执行以下操作:

public class MyTask extends AsyncTask < ... > {
// Maintain a ref to callback
OnCallCompleteCallBack callback;

MyTask(OnCallCompleteCallBack callback) {
this.callback = callback;
}

...

@Override
protected void onPostExecute(Void aVoid) {
if (callback != null) {
callback.onCallComplete(listSize);
}
}
}

让您的Activity实现OnCallCompleteCallBack并启动AsyncTask,如下所示:

new MyTask(this).execute();

然后,您可以在 Activity 的 onCallComplete() 实现中使用该值

关于java - Android:为什么这段代码不能在 onCreate 中运行,或者如何让它在没有线程的情况下工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45642048/

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