在android中传递参数并从asyntask中输出
我试图传递参数并从asyntask类中退出。这是我的asyntask课程在android中传递参数并从asyntask中输出,android,Android,我试图传递参数并从asyntask类中退出。这是我的asyntask课程 public class GetDataFromAsyncTask extends AsyncTask<String, Integer, Object>{ @Override protected Object doInBackground(String... strurl) { // TODO Auto-generated method stub Http
public class GetDataFromAsyncTask extends AsyncTask<String, Integer, Object>{
@Override
protected Object doInBackground(String... strurl) {
// TODO Auto-generated method stub
HttpClient httpclient = new DefaultHttpClient();
HttpGet getReq = new HttpGet(strurl[0]);
ResponseHandler<String> handler = new BasicResponseHandler();
// HttpResponse response;
Object responseString = null;
try {
//response = httpclient.execute(new HttpGet(strurl[0]));
HttpResponse execute = httpclient.execute(getReq);
responseString = httpclient.execute(getReq,handler);
} catch (ClientProtocolException e) {
//TODO Handle problems..
} catch (IOException e) {
//TODO Handle problems..
}
return responseString;
}
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
}
但上面的代码不起作用。调试源未找到时出现错误。
有人能帮忙吗。。。
提前感谢…您需要实现一个接口类。接口类将允许您创建一个回调函数,异步线程完成后将调用该函数。你可以找到如何做到这一点 编辑-更改链接到更直接的大纲 1创建一个新接口。为此,创建一个包含以下代码的新类:
public interface AsyncResponse {
void processFinish(Object output);
}
2将以下内容添加到GetDataFromAsyncTask类中:
public class GetDataFromAsyncTask extends AsyncTask{
public AsyncResponse delegate=null; // Creates Instance of your interface
@Override
protected void onPostExecute(Object result) {
delegate.processFinish(result); // Calls processFinish in the interface
}
3将以下内容添加到正在调用的任何活动中:
public class MainActivity implements AsyncResponse{ //implement AsyncResponse
GetDataFromAsyncTask strResult = new GetDataFromAsyncTask.execute(url);
@Override
public void onCreate(Bundle savedInstanceState) {
strResult.delegate = this;
}
//This method will run once the thread returns
void processFinish(Object output){
if(strResult!=null)
{
JSONArray objAry;
try {
String data = (String)strResult;
objAry = new JSONArray(data);
}
}
}
}
希望这有帮助,祝你好运。你有两个选择:
更简单的方法是将AsyncTask类设置为调用AsyncTask的类的内部类。然后,您可以简单地在AsyncTask类的onPostExecute方法中设置strResult变量的值。
如果希望将AsyncTask类保持为单独的顶级类,那么应该遵循Matty建议的方法。向AsyncTask类添加一个接口,并让您的调用类实现该接口,以便在任务完成后可以获得AsyncTask的结果
将这个异步类放在activity类中,您将在PostExecuteString结果方法上获得数据。还要确保在清单文件中添加了internet权限
class GetDataFromAsyncTask extends AsyncTask<String, Integer, String>{
@Override
protected Object doInBackground(String... strurl) {
String resutString = "";
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet getReq = new HttpGet(strurl[0]);
HttpResponse response = client.execute(getReq);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entityResponse = response.getEntity();
InputStream content = entityResponse.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(content));
String line = null;
while ((line = reader.readLine()) != null) {
builder.append(line + "\n");
}
reader.close();
resutString = builder.toString();
Log.d(TAG, "Successfuly :" + resutString);
} else {
Log.d(TAG, "Error seding data");
}
} catch (ConnectTimeoutException e) {
Log.w("Connection Tome Out", e);
} catch (ClientProtocolException e) {
Log.w("ClientProtocolException", e);
} catch (SocketException e) {
Log.w("SocketException", e);
} catch (IOException e) {
Log.w("IOException", e);
} /*catch (JSONException e) {
e.printStackTrace();
}*/
return resutString;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
strResult = result;
if(strResult!=null)
{
JSONArray objAry;
try {
String data = (String)strResult;
objAry = new JSONArray(data);
}catch(JSONException e){}
}
}
}
您需要将这些逻辑写入onPostexecute方法。
class GetDataFromAsyncTask extends AsyncTask<String, Integer, String>{
@Override
protected Object doInBackground(String... strurl) {
String resutString = "";
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet getReq = new HttpGet(strurl[0]);
HttpResponse response = client.execute(getReq);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entityResponse = response.getEntity();
InputStream content = entityResponse.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(content));
String line = null;
while ((line = reader.readLine()) != null) {
builder.append(line + "\n");
}
reader.close();
resutString = builder.toString();
Log.d(TAG, "Successfuly :" + resutString);
} else {
Log.d(TAG, "Error seding data");
}
} catch (ConnectTimeoutException e) {
Log.w("Connection Tome Out", e);
} catch (ClientProtocolException e) {
Log.w("ClientProtocolException", e);
} catch (SocketException e) {
Log.w("SocketException", e);
} catch (IOException e) {
Log.w("IOException", e);
} /*catch (JSONException e) {
e.printStackTrace();
}*/
return resutString;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
strResult = result;
if(strResult!=null)
{
JSONArray objAry;
try {
String data = (String)strResult;
objAry = new JSONArray(data);
}catch(JSONException e){}
}
}
}
new GetDataFromAsyncTask().execute(url)