Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从AsyncTasks doInBackground()检索数据?_Android_Android Asynctask - Fatal编程技术网

Android 如何从AsyncTasks doInBackground()检索数据?

Android 如何从AsyncTasks doInBackground()检索数据?,android,android-asynctask,Android,Android Asynctask,我会尽可能地简单 我的控制层中有一个方法,它使用一个类CallServiceTask,该类扩展了AsyncTask。调用newCallServiceTask()时。执行(参数) 如何检索从doInBackground返回的数据?我发现的所有教程都使用直接从其活动扩展异步任务的类 我的问题比那要复杂一点。 我只想获取doInBackground返回的Object[]并将其设置为我的RestClient类的私有数据成员 CallServiceTask如下所示: private class C

我会尽可能地简单

我的控制层中有一个方法,它使用一个类
CallServiceTask
,该类扩展了
AsyncTask
。调用new
CallServiceTask()时。执行(参数)

如何检索从
doInBackground
返回的数据?我发现的所有教程都使用直接从其
活动扩展
异步任务的类

我的问题比那要复杂一点。
我只想获取
doInBackground
返回的
Object[]
并将其设置为我的
RestClient
类的私有数据成员

CallServiceTask
如下所示:

    private class CallServiceTask extends AsyncTask<Object, Void, Object[]>
{

    protected Object[] doInBackground(Object... params) 
    {
        HttpUriRequest req = (HttpUriRequest) params[0];
        String url = (String) params[1];

        return executeRequest(req, url);
    }
}
私有类CallServiceTask扩展了AsyncTask
{
受保护对象[]doInBackground(对象…参数)
{
HttpUriRequest req=(HttpUriRequest)参数[0];
字符串url=(字符串)参数[1];
返回executeRequest(请求,url);
}
}
我的RestClient类如下所示:

public class RestClient
{

private ArrayList <NameValuePair> params;
private ArrayList <NameValuePair> headers;

private JSONObject jsonData;

private Object[] rtnData;

private String url;

private boolean connError;

public int getResponseCode() {
    return responseCode;
}

/**
 * 
 * @return  the result of whether the login was successful by looking at the response parameter of the JSON object. 
 */
public Boolean DidLoginSucceed()
{
    // Will Crash on socket error
        return ((JSONObject) rtnData[0]).optBoolean("response");
}

public String GetToken()
{
    return jsonData.optString("token");
}

public RestClient(String url)
{
    this.url = url;
    params = new ArrayList<NameValuePair>();
    headers = new ArrayList<NameValuePair>();
    rtnData = new Object[]{ new JSONObject() , Boolean.TRUE  };
}

public void AddParam(String name, String value)
{
    params.add(new BasicNameValuePair(name, value));
}

public void AddHeader(String name, String value)
{
    headers.add(new BasicNameValuePair(name, value));
}

/**
 * This method will execute, call the service and instantiate the JSON Object through executeRequest().
 * 
 * @param method    an enum defining which method you wish to execute.
 * @throws Exception
 */
public void ExecuteCall(RequestMethod method) throws Exception
{
    Object[] parameters = new Object[]{ new HttpGet() , new String("") };
    switch(method) {
        case GET:
        {
            //add parameters
            String combinedParams = "";
            if(!params.isEmpty()){
                combinedParams += "?";
                for(NameValuePair p : params)
                {
                    String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue());
                    if(combinedParams.length() > 1)
                    {
                        combinedParams  +=  "&" + paramString;
                    }
                    else
                    {
                        combinedParams += paramString;
                    }
                }
            }

            HttpGet request = new HttpGet(url + combinedParams);

            //add headers
            for(NameValuePair h : headers)
            {
                request.addHeader(h.getName(), h.getValue());
            }
            parameters[0] = request;
            parameters[1] = url;

            new CallServiceTask().execute(parameters);

            jsonData = ((JSONObject) rtnData[0]).optJSONObject("data");
            connError = (Boolean) rtnData[1];
            break;

        }
        case POST:
        {
            HttpPost request = new HttpPost(url);

            //add headers
            for(NameValuePair h : headers)
            {
                request.addHeader(h.getName(), h.getValue());
            }

            if(!params.isEmpty()){
                request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            }
            new CallServiceTask().execute(request, url);
            break;
        }
    }
}

private Object[] executeRequest(HttpUriRequest request, String url)
{
    HttpClient client = new DefaultHttpClient();
    client = getNewHttpClient();

    HttpResponse httpResponse;

    try {
        httpResponse = client.execute(request);
        HttpEntity entity = httpResponse.getEntity();

        if (entity != null) {

            InputStream instream = entity.getContent();
            String response = convertStreamToString(instream);
            try {
                rtnData[0] = new JSONObject(response);
                rtnData[1] = false;

            } catch (JSONException e1) {
                rtnData[1] = true;
                e1.printStackTrace();
            }

            // Closing the input stream will trigger connection release
            instream.close();
        }

    } catch (ClientProtocolException e)  {
        client.getConnectionManager().shutdown();
        e.printStackTrace();
    } catch (IOException e) {
        client.getConnectionManager().shutdown();
        e.printStackTrace();
    }
    return rtnData;
}


private static String convertStreamToString(InputStream is) {

    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}

/**
 * Custom HTTP Client accepting all SSL Certified Web Services.
 * 
 * @return n HttpClient object.
 */
public HttpClient getNewHttpClient() {
    try {
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null, null);

        SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
        sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https", sf, 443));

        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

        return new DefaultHttpClient(ccm, params);
    } catch (Exception e) {
        return new DefaultHttpClient();
    }
}
new CallServiceTask(this).execute(request, url);
公共类RestClient
{
私有数组列表参数;
私有数组列表头;
私有JSONObject jsonData;
私有对象[]rtnda;
私有字符串url;
私有布尔错误;
public int getResponseCode(){
返回响应代码;
}
/**
* 
*@通过查看JSON对象的响应参数返回登录是否成功的结果。
*/
公共布尔值didloginsucsed()
{
//将在套接字错误时崩溃
返回((JSONObject)rtnData[0]).optBoolean(“响应”);
}
公共字符串GetToken()
{
返回jsonData.optString(“令牌”);
}
公共RestClient(字符串url)
{
this.url=url;
params=新的ArrayList();
headers=newarraylist();
rtnda=new Object[]{new JSONObject(),Boolean.TRUE};
}
public void AddParam(字符串名称、字符串值)
{
添加(新的BasicNameValuePair(名称、值));
}
public void AddHeader(字符串名称、字符串值)
{
添加(新的BasicNameValuePair(名称、值));
}
/**
*此方法将执行、调用服务并通过executeRequest()实例化JSON对象。
* 
*@param method定义要执行的方法的枚举。
*@抛出异常
*/
public void ExecuteCall(RequestMethod)引发异常
{
Object[]parameters=new Object[]{new HttpGet(),new String(“”};
开关(方法){
案例获取:
{
//添加参数
字符串组合参数=”;
如果(!params.isEmpty()){
组合参数+=“?”;
用于(名称值对p:params)
{
字符串paramString=p.getName()+“=”+urlcoder.encode(p.getValue());
如果(combinedParams.length()>1)
{
组合参数+=“&”+参数字符串;
}
其他的
{
combinedParams+=paramString;
}
}
}
HttpGet请求=新的HttpGet(url+组合参数);
//添加标题
对于(NameValuePair h:Header)
{
addHeader(h.getName(),h.getValue());
}
参数[0]=请求;
参数[1]=url;
新建CallServiceTask().execute(参数);
jsonData=((JSONObject)rtnData[0])。optJSONObject(“数据”);
connError=(布尔)rtnda[1];
打破
}
个案职位:
{
HttpPost请求=新的HttpPost(url);
//添加标题
对于(NameValuePair h:Header)
{
addHeader(h.getName(),h.getValue());
}
如果(!params.isEmpty()){
setEntity(新的UrlEncodedFormEntity(params,HTTP.UTF_8));
}
新建CallServiceTask().execute(请求,url);
打破
}
}
}
私有对象[]executeRequest(HttpUriRequest请求,字符串url)
{
HttpClient=new DefaultHttpClient();
client=getNewHttpClient();
HttpResponse HttpResponse;
试一试{
httpResponse=client.execute(请求);
HttpEntity entity=httpResponse.getEntity();
如果(实体!=null){
InputStream instream=entity.getContent();
字符串响应=convertStreamToString(流内);
试一试{
rtnda[0]=新的JSONObject(响应);
rtnda[1]=假;
}捕获(JSONException e1){
rtnda[1]=真;
e1.printStackTrace();
}
//关闭输入流将触发连接释放
流内关闭();
}
}捕获(客户端协议例外e){
client.getConnectionManager().shutdown();
e、 printStackTrace();
}捕获(IOE异常){
client.getConnectionManager().shutdown();
e、 printStackTrace();
}
返回数据;
}
私有静态字符串convertStreamToString(InputStream为){
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is));
StringBuilder sb=新的StringBuilder();
字符串行=null;
试一试{
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
is.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
使某人返回字符串();
}
/**
*接受所有SSL认证的Web服务的自定义HTTP客户端。
* 
*@return n HttpClient对象。
*/
公共HttpClient getNewHttpClient(){
试一试{
KeyStore trustStore=KeyStore.getInstance(KeyStore.getDefaultType());
load(null,null);
SSLSocketFactory sf=新的MySSLocketFactory(信任商店);
sf.setHostnameVerifi
new CallServiceTask(this).execute(request, url);
private class CallServiceTask extends AsyncTask<Object, Void, Object[]>
{
    RestClient caller;

    CallServiceTask(RestClient caller) {
        this.caller = caller;
    }


    protected Object[] doInBackground(Object... params) 
    {
        HttpUriRequest req = (HttpUriRequest) params[0];
        String url = (String) params[1];
        return executeRequest(req, url);
    }

    protected onPostExecute(Object result) {
        caller.onBackgroundTaskCompleted(result);
    }
}
public interface ClientIF {

    public void onResponseReceived(Object result);

}
public abstract class CallServiceTask extends AsyncTask<Object, Void, Object[]> 
    implements ClientIF
{
    Activity activity;

    CallServiceTask(Activity activity) {
        this.activity = activity;
    }

    public abstract void onResponseReceived(Object result); 

    protected Object[] doInBackground(Object... params) 
    {
        HttpUriRequest req = (HttpUriRequest) params[0];
        String url = (String) params[1];
        return executeRequest(req, url);
    }

    protected onPostExecute(Object result) {
        onResponseReceived(result);
    }
}
public class RestClient
{
CallServiceTask service = new CallServiceTask() {
    @Override
    public void onResponseReceived(Object result) {
    // TODO Auto-generated method stub

    }
};

}
public class getOperators extends AsyncTask<Void, Void, String> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        items = new ArrayList();
        dialog = new ProgressDialog(PrepaidOperatorsListActivity.this);
        dialog.setMessage("Please Wait...");
        dialog.setCancelable(false);
        dialog.show();
    }



    @Override
    protected String doInBackground(Void... params) {
        BufferedReader reader;
        StringBuffer buffer;
        String res = null;

        try {
            URL url = new URL("");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setReadTimeout(40000);
            con.setConnectTimeout(40000);
            con.setRequestMethod("GET");
            con.setRequestProperty("Content-Type", "application/json");
            int status = con.getResponseCode();
            InputStream inputStream;
            if (status == HttpURLConnection.HTTP_OK) {
                inputStream = con.getInputStream();
            } else {
                inputStream = con.getErrorStream();
            }
            reader = new BufferedReader(new InputStreamReader(inputStream));
            buffer = new StringBuffer();
            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }
            res = buffer.toString();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return res;
    }
    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        System.out.println("JSON RESP:" + s);
        String response = s;
        try {

            JSONObject ecomerrce = new JSONObject(response);
            JSONArray jsonArray = ecomerrce.getJSONArray("prepaid_operators");

            for (int j = 0; j < jsonArray.length(); j++) {
                JSONObject jsonObject = jsonArray.getJSONObject(j);

                PrepaidOperatorsPojo prepaidOperatorsPojo = new PrepaidOperatorsPojo(jsonObject.getString("operator_name"), jsonObject.getString("operator_code"), jsonObject.getString("operator_display_comission"), jsonObject.getString("operator_calculate_comission"));
                items.add(prepaidOperatorsPojo);

            }
            if (items.size() > 0) {
                dialog.dismiss();
                prepaidOperatorListAdapter = new PrepaidOperatorListAdapter(PrepaidOperatorsListActivity.this, items);
                rvPrepaidOperatorList.setAdapter(prepaidOperatorListAdapter);

            } else {
                dialog.dismiss();
                Toast.makeText(PrepaidOperatorsListActivity.this, "No Data to display", Toast.LENGTH_SHORT).show();
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
private void walletStatements() {
        JSONObject post_search = new JSONObject();
        try {

            post_search.put("username", getUserName);


        } catch (JSONException e) {
            e.printStackTrace();
        }
        if (post_search.length() > 0) {
            try {
               new Getwalletstatements().execute(String.valueOf(post_search));

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

        }
    }


    class Getwalletstatements extends AsyncTask<String, String, String> {
        String JsonResponse = null;
        ProgressDialog dialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            dialog = new ProgressDialog(ReportsActivity.this);
            dialog.setMessage("Please Wait...");
            dialog.setCancelable(false);
            dialog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            String JsonDATA = params[0];
            HttpURLConnection urlConnection = null;
            BufferedReader reader = null;
            URL url = null;

            try {
                url = new URL(Constant.url+"GetReports_v9.php");
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setDoOutput(true);                // is output buffer writter
                urlConnection.setRequestMethod("POST");
                urlConnection.setRequestProperty("Content-Type", "application/json");
                urlConnection.setRequestProperty("Accept", "application/json");//set headers and method
                Writer writer = new BufferedWriter(new OutputStreamWriter(urlConnection.getOutputStream(), "UTF-8"));
                writer.write(JsonDATA);// json data
                writer.close();

                InputStream inputStream = urlConnection.getInputStream();//input stream
                StringBuffer buffer = new StringBuffer();
                if (inputStream == null) {                    // Nothing to do.
                    return null;
                }
                reader = new BufferedReader(new InputStreamReader(inputStream));
                String inputLine;

                while ((inputLine = reader.readLine()) != null)
                    buffer.append(inputLine + "\n");

                if (buffer.length() == 0) {                    // Stream was empty. No point in parsing.
                    return null;
                }

                JsonResponse = buffer.toString();


                return JsonResponse;

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (ProtocolException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (final IOException e) {

                    }
                }
            }


            return null;
        }

        @Override
        protected void onPostExecute(String s) {

            if (JsonResponse != null) {
                try {
                    NetworkIN.iv= Constant.iv;
                    NetworkIN.change=Constant.key;
                    NetworkIN mCrypt=new NetworkIN();
                    String decrypted = new String( mCrypt.decrypt(JsonResponse.trim()) );

                    if(decrypted!=null){
                        JSONObject ordersHistory = new JSONObject(decrypted);
                        msg = ordersHistory.getString("msg");

                        JSONArray jsonArray = ordersHistory.getJSONArray("PPDetails");

                        ordersCount = jsonArray.length();
                        //for (int j = 0; j < jsonArray.length(); j++)
                        for (int j = jsonArray.length() - 1; j >= 0; j--)
                        {
                            JSONObject jsonObject = jsonArray.getJSONObject(j);


                            String message,total_in,inType ;

                            total_in =jsonObject.getString("total_in");
                            inType =jsonObject.getString("in_type");
                            message="Congratulations your wallet is credited by Rs."+total_in+" because of "+inType;
                            ReportsPojo reportsPojo = new ReportsPojo(jsonObject.getString("reg_id"),
                                    jsonObject.getString("username"),
                                    jsonObject.getString("transfer_from"),
                                    jsonObject.getString("transfer_to"),
                                    jsonObject.getString("total_in"),
                                    jsonObject.getString("tds"),
                                    jsonObject.getString("in_amount") ,
                                    jsonObject.getString("out_amount"),
                                    jsonObject.getString("in_type"),
                                    jsonObject.getString("created_on"),
                                    message);

                            reportsItems.add(reportsPojo);
                        }
                    }else{

                    }


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

                if (msg.equals("Success")) {

                    reportsAdapter = new ReportsAdapter(ReportsActivity.this, reportsItems);
                    reportsListview.setAdapter(reportsAdapter);

                } else {
                    Toast.makeText(ReportsActivity.this, "Sorry "+msg, Toast.LENGTH_LONG).show();

                }
                dialog.dismiss();
            } else {
                dialog.dismiss();
            }
        }
public class MyAsyncTask extends AsyncTask<String, Void, String> {  

    @Override    
    protected void onPreExecute() {
        //showProgressDialog
        dialog = new ProgressDialog(this);
        dialog.setMessage("Loading........");
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.show();
    }

    @Override    
    protected String doInBackground(String... strings) {
      HttpURLConnection httpURLConnection;
      BufferedReader reader;
      int responseCode ;

        try {
            URL url = new URL(YOUR_URL);
            URLConnection urlConnection = url.openConnection();
            httpURLConnection = (HttpURLConnection) urlConnection;
            httpURLConnection.setRequestMethod("GET");
            httpURLConnection.setDoOutput(true);

            responseCode = httpURLConnection.getResponseCode();
            InputStream inputStream = httpURLConnection.getInputStream();
            if (inputStream != null) {
                if (responseCode == 200) {
                    reader = new BufferedReader(new InputStreamReader(inputStream));
                    StringBuilder buffer = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        buffer.append(line);
                    }
                    return buffer.toString();
                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override    
    protected void onPostExecute(String result) {
        progressDialog.dismiss();
        // Fetch Your Data Add Your Code Here
    }
}