Android与HttpClient的联网需要很多时间

Android与HttpClient的联网需要很多时间,android,http,android-networking,Android,Http,Android Networking,当我尝试使用HttpCleitn从我的服务器获取数据时,我遇到了问题。这需要很多时间(大约30秒,响应只有几kB),并且它会不断记录一条消息:“跳过xxx帧。应用程序可能在其主线程上做了太多工作”。这些信息非常多(比如1000或2000条)。 我对安卓开发还很陌生,不知道自己做错了什么。尽管从服务器获取数据的所有过程都保存在doInBackground方法中 这是我所有的代码 public class MainActivity extends Activity { ListView video

当我尝试使用HttpCleitn从我的服务器获取数据时,我遇到了问题。这需要很多时间(大约30秒,响应只有几kB),并且它会不断记录一条消息:“跳过xxx帧。应用程序可能在其主线程上做了太多工作”。这些信息非常多(比如1000或2000条)。 我对安卓开发还很陌生,不知道自己做错了什么。尽管从服务器获取数据的所有过程都保存在doInBackground方法中

这是我所有的代码

public class MainActivity extends Activity {

ListView videoList;
ArrayList<String> videoArrayList;
ArrayAdapter<String> videoAdapter;
Context context;
String feedUrl = "http://www.rateksib.ru/ios/track_json.php?order=НскС101712124";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    context = this;

    videoArrayList = new ArrayList<String>();
    videoList = (ListView) findViewById(R.id.videoList);
    videoAdapter = new ArrayAdapter<String>(this, R.layout.video_list_item, videoArrayList);
    videoList.setAdapter(videoAdapter);

    VideoListTask loaderTask = new VideoListTask();
    loaderTask.execute();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public class VideoListTask extends AsyncTask<Void, Void, Void> {

    ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(context);
        dialog.setTitle("Выполняется запрос");
        dialog.show();
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Void result) {
        dialog.dismiss();
        videoAdapter.notifyDataSetChanged();
        super.onPostExecute(result);

    }

    @Override
    protected Void doInBackground(Void... params) {
        HttpClient client = new DefaultHttpClient();
        HttpGet getRequest = new HttpGet(feedUrl);

        try 
        {
            HttpResponse response = client.execute(getRequest);
            StatusLine statusLine = response.getStatusLine();
            if( statusLine.getStatusCode() != 200 ) {
                return null;
            }

            InputStream jsonStream = response.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(jsonStream));
            StringBuilder stringBuilder = new StringBuilder();

            String line;
            while( (line = reader.readLine()) != null ) {
                stringBuilder.append(line);
            }

            String jsonData = stringBuilder.toString();

            JSONObject json = new JSONObject(jsonData);
            JSONArray results = json.getJSONArray("results");

            for( int i = 0; i < results.length(); i++ ) {
                JSONObject item = results.getJSONObject(i);

                String status = item.getString("status");
                String date = item.getString("date");

                Log.i("OK:", "Detsya");

                videoArrayList.add(date + ": " + status);
            }



        } 
        catch (ClientProtocolException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }


}
公共类MainActivity扩展活动{
列表视图视频列表;
ArrayList视频ArrayList;
阵列适配器;
语境;
字符串feedUrl=”http://www.rateksib.ru/ios/track_json.php?order=НскС101712124";
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
上下文=这个;
videoArrayList=新的ArrayList();
videoList=(ListView)findViewById(R.id.videoList);
videoAdapter=new ArrayAdapter(此,R.layout.video\u列表项,videoArrayList);
videoList.setAdapter(videoAdapter);
VideoListTask loaderTask=新建VideoListTask();
loaderTask.execute();
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
公共类VideoListTask扩展了AsyncTask{
进程对话;
@凌驾
受保护的void onPreExecute(){
dialog=新建进度对话框(上下文);
对话框.设置标题(“ззззззззззззззз;
dialog.show();
super.onPreExecute();
}
@凌驾
受保护的void onPostExecute(void结果){
dialog.dismise();
videoAdapter.notifyDataSetChanged();
super.onPostExecute(结果);
}
@凌驾
受保护的Void doInBackground(Void…参数){
HttpClient=new DefaultHttpClient();
HttpGet getRequest=新的HttpGet(feedUrl);
尝试
{
HttpResponse response=client.execute(getRequest);
StatusLine StatusLine=response.getStatusLine();
if(statusLine.getStatusCode()!=200){
返回null;
}
InputStream jsonStream=response.getEntity().getContent();
BufferedReader=new BufferedReader(new InputStreamReader(jsonStream));
StringBuilder StringBuilder=新的StringBuilder();
弦线;
而((line=reader.readLine())!=null){
stringBuilder.append(行);
}
字符串jsonData=stringBuilder.toString();
JSONObject json=新的JSONObject(jsonData);
JSONArray results=json.getJSONArray(“结果”);
对于(int i=0;i

}

这与网络连接速度有关,您的活动冻结了吗?不,它一直在运行,并实际向我显示请求的结果。但就像我说的,这需要很多时间。我不认为这是网络连接速度的问题,因为类似的iphone应用程序可以立即运行。这个问题是由互联网连接引起的。如果您在设备(您正在测试的)的web浏览器中检查url(键入url),则可能会比较慢。然后查找网络是否慢或有任何问题other@SIVAKUMAR.J我听从了你的建议,它在浏览器中运行得又好又快。