0

現在、私はここで問題に直面しています。彼がjson文字列を提供したRESTサービスをクエリすると、30,000文字が提供されます。クエリは3gネットワークで行われます。文字列が約4000文字後に停止するという問題があり、残りがどこにあるかわかりません。

RestClient.java

public class RestClient {

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

private String url;

private int responseCode;
private String message;

private String response;

public String getResponse() {
    return response;
}

public String getErrorMessage() {
    return message;
}

public int getResponseCode() {
    return responseCode;
}

public RestClient(String url)
{
    this.url = url;
    params = new ArrayList<NameValuePair>();
    headers = new ArrayList<NameValuePair>();
}

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));
}

public void Execute(RequestMethod method) throws Exception
{
    switch(method) {
        case GET:
        {
            //add parameters
            String combinedParams = "";
            if(!params.isEmpty()){
                combinedParams += "?";
                for(NameValuePair p : params)
                {
                    String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),"UTF-8");
                    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());
            }

            executeRequest(request, url);
            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));
            }

            executeRequest(request, url);
            break;
        }
    }
}

private void executeRequest(HttpUriRequest request, String url)
{
    request.setHeader("Authorization", "Basic sssss");
    HttpClient client = new DefaultHttpClient();
    HttpResponse httpResponse;

    try {
        httpResponse = client.execute(request);

        responseCode = httpResponse.getStatusLine().getStatusCode();
        message = httpResponse.getStatusLine().getReasonPhrase();

        HttpEntity entity = httpResponse.getEntity();

        if (entity != null) {

            InputStream instream = entity.getContent();
            response = convertStreamToString(instream);

            // 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();
    }
}

private static String convertStreamToString(InputStream is) {

    BufferedReader reader = new BufferedReader(new InputStreamReader(is),8 * 1024);
    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();
}

Aktivityクラス

 ConnectivityManager connMgr = (ConnectivityManager) 
                getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) {
                // fetch data

            execute = new Netzwerk().execute("https://.....");
            try {
                String  t = execute.get().toString();
                    Log.d("MyTag", "Response: " + t);


            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ExecutionException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 

        } else {
            // display error
        }

Netzwerk.java

public class Netzwerk extends AsyncTask {
    @Override
protected Object doInBackground(Object... arg0) {
            RestClient rest = new RestClient(arg0[0].toString());
            try {
                 rest.Execute(RequestMethod.GET);
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println(rest.getResponse());
            Log.d("MyTag", "getResponse: " + rest.getResponse());
            Log.d("MyTag", "getResponseCode: " + rest.getResponseCode());
    return rest.getResponse();
}

public String httpAuthentication(String user, String password) {

    String auth=null;
    try {
        auth = android.util.Base64.encodeToString(
                (user + ":" + password).getBytes("UTF-8"), 
                android.util.Base64.NO_WRAP);
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Log.d("MyTag", "Base64 encoded auth string: " + auth);
    return auth;
}}
4

1 に答える 1

0

この長い処理には AsyncTask クラスを使用する必要があると思います。

于 2012-07-10T07:45:26.497 に答える