gpt4 book ai didi

android - 使用 AsyncTask 填充 ListView

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:29 25 4
gpt4 key购买 nike

这可能不是很优雅,但我想做的是连接到 Web 服务,获取 JSON,解析它,从中创建一个对象,将该对象添加到 ArrayList,然后使用该 ArrayList填充我的 ListView。

我正在尝试使用 AsyncTask 完成所有这些工作。

总结:doInBackgroud 接受一个 url 字符串,用它来连接到一个 web 服务。我将 JSON 数据作为字符串获取,对其进行解析,从数据中构造一个新对象,并将其添加到 ArrayList。然后在onPostExecute我正在尝试使用 ArrayAdapter 设置列表适配器它利用了我的 ArrayList。

这是我所拥有的:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;

import org.json.JSONArray;
import org.json.JSONObject;

import oauth.signpost.OAuthConsumer;
import oauth.signpost.basic.DefaultOAuthConsumer;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class AllOffersListActivity extends ListActivity {

private static final String CONSUMER_KEY = "bla";
private static final String CONSUMER_SECRET = "bla";


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



new CreateArrayListTask().execute("http://example.com/sample.json");




}

private class CreateArrayListTask extends AsyncTask<String, Void, ArrayList<Offer>> {
private final ProgressDialog dialog = new ProgressDialog(AllOffersListActivity.this);

@Override
protected void onPreExecute() {
this.dialog.setMessage("Fetching offers...");
this.dialog.show();

}
@Override
protected ArrayList<Offer> doInBackGround(String...urls) {
ArrayList<Offer> offerList = new ArrayList<Offer>();

for(String url: urls) {
OAuthConsumer consumer = new DefaultOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
consumer.setTokenWithSecret("", "");

try {

URL url1 = new URL(url);
HttpURLConnection request = (HttpURLConnection) url1.openConnection();

// sign the request
consumer.sign(request);

// send the request
request.connect();


String JSONString = convertStreamToString(request.getInputStream());

JSONObject jObject = new JSONObject(JSONString);

JSONObject offerObject = jObject.getJSONObject("offer");

String titleValue = offerObject.getString("title");
//System.out.println(titleValue);

String descriptionValue = offerObject.getString("description");
//System.out.println(attributeValue);
JSONObject businessObject = offerObject.getJSONObject("business");
String nameValue = businessObject.getString("name");

Offer myOffer = new Offer(titleValue, descriptionValue, nameValue);

offerList.add(myOffer);

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

}
}
return offerList;

}

@Override
protected void onPostExecute(ArrayList<Offer> offerList) {
if(this.dialog.isShowing())
this.dialog.dismiss();
setListAdapter(new ArrayAdapter<Offer>(AllOffersListActivity.this, android.R.layout.simple_list_item_1, offerList));
}
}

private String convertStreamToString(InputStream inputStream) throws IOException {
if(inputStream != null) {
Writer writer = new StringWriter();

char[] buffer = new char[1024];

try {

Reader reader = new BufferedReader( new InputStreamReader(inputStream, "UTF-8"));

int n;
while((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);

}
} finally {
inputStream.close();
}
return writer.toString();
} else {
return "";
}

}

}

我看到两个错误。一个在我的私有(private)异步类上:"The type AllOffersListActivity.CreateArrayListTask must implement the inherited abstract method AsyncTask<String,Void,ArrayList<Offer>>.doInBackground(String...)"

其次,在我的 doInBackGround 上覆盖,我得到:The method doInBackGround(String...) of type AllOffersListActivity.CreateArrayListTask must override or implement a supertype method

我在这里错过了什么?

最佳答案

这只是一个小错字;应该是 doInBackground 而不是 doInBackGround

关于android - 使用 AsyncTask 填充 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5987003/

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