大佬教程收集整理的这篇文章主要介绍了从AsyncTask类返回数据,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
对我来说,关键是创建一个名为URLWithParams的类或其他类,因为AsyncTask将只允许发送一种类型的输入,并且我需要URL和http请求的参数。
public class URLWithParams {
public String url;
public List<nameValuePair> nameValuePairs;
public URLWithParams()
{
nameValuePairs = new ArrayList<nameValuePair>();
}
}
然后将其发送到JsONClIEnt:
public class JsONClIEnt extends AsyncTask<URLWithParams, VoID, String> {
private final static String TAG = "JsONClIEnt";
ProgressDialog progressDialog ;
GetJsONListener getJsONListener;
public JsONClIEnt(GetJsONListener Listener){
this.getJsONListener = Listener;
}
@OverrIDe
protected String doInBackground(URLWithParams... urls) {
return connect(urls[0].url, urls[0].nameValuePairs);
}
public static String connect(String url, List<nameValuePair> pairs)
{
httpClIEnt httpclIEnt = new DefaulthttpClIEnt();
if(url == null)
{
Log.d(TAG, "want to connect, but url is null");
}
else
{
Log.d(TAG, "starting connect with url " + url);
}
if(pairs == null)
{
Log.d(TAG, "want to connect, though pairs is null");
}
else
{
Log.d(TAG, "starting connect with this many pairs: " + pairs.size());
for(nameValuePair dog : pairs)
{
Log.d(TAG, "example: " + dog.toString());
}
}
// Execute the request
httpResponse response;
try {
// Prepare a request object
httpPost httpPost = new httpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(pairs));
response = httpclIEnt.execute(httpPost);
// examine the response status
Log.i(TAG,response.getStatusline().toString());
BufferedReader reader = new BufferedReader(new inputStreamReader(response.getEntity().getContent(), "UTF-8"));
String Json = reader.readline();
return Json;
} catch (ClIEntProtocolException e) {
// Todo auto-generated catch block
e.printstacktrace();
} catch (IOException e) {
// Todo auto-generated catch block
e.printstacktrace();
}
return null;
}
@OverrIDe
protected voID onPostExecute(String Json ) {
getJsONListener.onRemoteCallComplete(Json);
}
public interface GetJsONListener {
public voID onRemoteCallComplete(String JsonFromNet);
}
}
然后从我的主班这样叫
public class BookCatalog implements GetJsONListener {
private final String TAG = this.getClass().getSimplename();
private String catalog_url = "URL";
private voID getCatalogFromServer() {
URLWithParams mURLWithParams = new URLWithParams();
mURLWithParams.url = catalog_url;
try {
JsONClIEnt asyncPoster = new JsONClIEnt(this);
asyncPoster.execute(mURLWithParams);
} catch (Exception e) {
// Todo auto-generated catch block
e.printstacktrace();
}
}
@OverrIDe
public voID onRemoteCallComplete(String JsonBookCatalogList) {
Log.d(TAG, "received Json catalog:");
Log.d(TAG, JsonBookCatalogList);
JsONObject bookCatalogResult;
try {
bookCatalogResult = (JsONObject) new JsONTokener(JsonBookCatalogList).nextValue();
JsONArray books = bookCatalogResult.getJsONArray("books");
if(books != null) {
ArrayList<String> newBookOrdering = new ArrayList<String>();
int num_books = books.length();
BookCatalogEntry temp;
DeBUGLog.d(TAG, "apparently we found " + Integer.toString(num_books) + " books.");
for(int book_ID = 0; book_ID < num_books; book_ID++) {
JsONObject book = books.getJsONObject(book_ID);
String Title = book.getString("Title");
int version = book.getInt("price");
}
}
} catch (JsONException e) {
e.printstacktrace();
}
}
}
如何从AsyncTask中获取数据?我的MainActivity正在调用触发AsyncTask的DataCall.getJSON函数,但是我不确定如何将数据返回到原始Activity。
调用DataCall的MainActivity应该返回一个字符串并将其保存在state_data
String state_data = DataCall.getJSON(spinnerURL,spinnerContentType);
数据通话:
public class DataCall extends Activity {
private static final String TAG = "MyApp";
private class DownloadWebPageTask extends AsyncTask<String,Void,String> {
protected String doInBackground(String... urls) {
String response = "";
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return response;
}
protected void onPostExecute(String result) {
//THIS IS WHERE I NEED TO RETURN MY DATA TO THE MAIN ACTIVITY. (I am guessing)
}
}
public void getJSON(String myUrlString,String contentType) {
DownloadWebPageTask task = new DownloadWebPageTask();
task.execute(new String[] { "http://www.mywebsite.com/" + myUrlString });
}
}
以上是大佬教程为你收集整理的从AsyncTask类返回数据全部内容,希望文章能够帮你解决从AsyncTask类返回数据所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。