gpt4 book ai didi

java - AsyncTask错误Android应用程序崩溃

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

我的 oncreate 代码:

 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.board);
ArrayList<String> passing = new ArrayList<String>();
new AsyncTaskParseJson().execute();


}

这是我的代码:

public class AsyncTaskParseJson extends AsyncTask<String, String, String> {
final String TAG = "AsyncTaskParseJson.java";
String yourJsonStringUrl = "my url here";
JSONArray dataJsonArr = null;

@Override
protected void onPreExecute() {}

@SuppressWarnings("null")
@Override
public String doInBackground(String... arg0) {

final String[] values = null;
try {

// instantiate our json parser
JsonParser jParser = new JsonParser();

// get json string from url
JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);

// get the array of users
dataJsonArr = json.getJSONArray("response");

// loop through all users
for (int i = 1; i < dataJsonArr.length(); i++) {

JSONObject c = dataJsonArr.getJSONObject(i);
String text = c.getString("text");
values[i]=text;
}
// ArrayAdapter<String> adapter = new ArrayAdapter<String>(Board.this,R.layout.item, R.id.label, values);
// list1.setAdapter(adapter);


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


return null;
}

@Override
protected void onPostExecute(String strFromDoInBg) {}



}

因此,当我像这样评论部分 value[i] 时,它就开始 Activity :

      //values[i]=text;

但是当它没有被注释时,应用程序就会崩溃。我想 doInBackground 返回 String[] 数组,我该怎么做?

最佳答案

你需要有

 values = new String[dataJsonArr.length()]; 

另请注意,注释行位于 doInbackground 中。但您无法从后台线程更新 ui。所以下面应该转到onPostExecute .

 //   ArrayAdapter<String> adapter = new ArrayAdapter<String>(Board.this,R.layout.item, R.id.label, values);
// list1.setAdapter(adapter);

而不是使用 String数组最好使用 ArrayList<String>

您还需要更改参数类型

public class AsyncTaskParseJson extends AsyncTask<String, String, ArrayList<String>> {

然后

 @Override
public ArrayList<String> doInBackground(String... arg0) {

ArrayList<String> values = new ArrayList<String>();
try {

// instantiate our json parser
JsonParser jParser = new JsonParser();

// get json string from url
JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);

// get the array of users
dataJsonArr = json.getJSONArray("response");

// loop through all users
for (int i = 1; i < dataJsonArr.length(); i++) {

JSONObject c = dataJsonArr.getJSONObject(i);
String text = c.getString("text");
values.add(text);
}
}
catch (JSONException e) {
e.printStackTrace();
}

return values;
}

然后

 @Override
protected void onPostExecute(ArrayList<String> result) {
super.onPostExecute(result);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(Board.this,R.layout.item, R.id.label, result);
list1.setAdapter(adapter);
}

还要确保 list1在您之前初始化 setAdapter因为我没有看到代码 list1已初始化。

关于java - AsyncTask错误Android应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21844084/

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