在android中传递参数并从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

我试图传递参数并从asyntask类中退出。这是我的asyntask课程

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)