Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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
Java 在Android中创建同步HTTP GET请求_Java_Android - Fatal编程技术网

Java 在Android中创建同步HTTP GET请求

Java 在Android中创建同步HTTP GET请求,java,android,Java,Android,我试图通过HTTPGET获取一些文本并将其显示到UI。我不需要异步任务(即,用户必须等到我完全获得文本) 我在主线程中尝试了这个 try { String url = URL_HERE; HttpGet httpget = new HttpGet (url); ResponseHandler<String> responseHandler = new BasicResponseHandler(); text = Client.execute(http

我试图通过HTTPGET获取一些文本并将其显示到UI。我不需要异步任务(即,用户必须等到我完全获得文本)

我在主线程中尝试了这个

try {
    String url = URL_HERE; 
    HttpGet httpget = new HttpGet (url);
    ResponseHandler<String> responseHandler = new BasicResponseHandler();
    text = Client.execute(httpget, responseHandler);
}
catch(Exception ex) {
    text = ex.getLocalizedMessage();
}
试试看{
字符串url=此处的url\u;
HttpGet HttpGet=新的HttpGet(url);
ResponseHandler ResponseHandler=新BasicResponseHandler();
text=Client.execute(httpget,responseHandler);
}
捕获(例外情况除外){
text=ex.getLocalizedMessage();
}
但我总是看到一个例外。 我只需要一个简单的机制来获取文本。你能建议一下吗


非常感谢,

根据Android的设计,所有网络都必须在一个单独的线程中。请求很可能需要一段时间,用户必须尽可能少地等待,以避免麻烦。因此,您必须使用
AsyncTask
或类似工具。

您应该使用AsyncTask,以便UI线程不会冻结。如果UI线程冻结,Android将向用户显示一个“应用程序无响应”对话框,因此在异步任务中执行调用非常重要,即使您不希望用户在执行该任务时使用UI


您可以“阻止”覆盖ASyncTask中onPreExecute方法的UI(例如显示进度对话框),然后“取消阻止”覆盖onPostExecute方法的UI(例如删除进度对话框)。

您应该使用ASyncTask,但如果必须使用同步方法 试一试

字符串resut=execute().get().toString()

它将冻结用户界面(应用程序不响应),直到您收到来自httpget的消息
  • 您应该始终使用
    AsyncTask
    执行网络操作 在android中
  • 因为任何需要更多时间加载到UI的操作都会导致
    “android应用程序无响应”
    (ANR)

  • 示例::

    public class FrgLatein extends Fragment {
            //New-Instance
            public static FrgLatein newInstance(){
                Log.d("FrgLatein", "newInstance");
                FrgLatein fragment = new FrgLatein();
                return  fragment;
            }
    
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) {
                Log.d("FrgLatein", "onCreateView");
                View view=inflater.inflate(R.layout.frg_latein, container, false);
                setHasOptionsMenu(true);
    
    
                return view;
            }
    
            @Override
            public void onActivityCreated(Bundle savedInstanceState) {
                Log.d("FrgLatein", "onActivityCreated");
                super.onActivityCreated(savedInstanceState);
    
            }
    
            @Override
            public void onStart() {
                Log.d("FrgLatein", "onStart");
                super.onStart();
                new LongOperation1().execute("");
    
            }
    
        private class LongOperation1 extends AsyncTask<String, Void, String> {
    
                @Override
                protected String doInBackground(String... params) {
                     // Do the Web service long run here
                try {
                     String url = URL_HERE; 
                     HttpGet httpget = new HttpGet (url);
                     ResponseHandler<String> responseHandler = new BasicResponseHandler();
                     text = Client.execute(httpget, responseHandler);
                    }
                    catch(Exception ex) {
                    text = ex.getLocalizedMessage();
                   }
                   return "Executed";
                }
    
                @Override
                protected void onPostExecute(String result) {
                  // Do the UI-task here
    
                }
    
                @Override
                protected void onPreExecute() {
                  // Do the UI-task here
                }
    
                @Override
                protected void onProgressUpdate(Void... values) {
                  // Do the UI-task here which has to be done during backgroung tasks are running like a downloading process
                }
            }
    }
    
    公共类FrgLatein扩展片段{
    //新实例
    公共静态FrgLatein newInstance(){
    Log.d(“FrgLatein”、“newInstance”);
    frgaltein片段=新frgaltein();
    返回片段;
    }
    @凌驾
    创建视图上的公共视图(布局、充气机、视图组容器、,
    Bundle savedInstanceState){
    Log.d(“FrgLatein”、“onCreateView”);
    视图=充气机。充气(R.layout.frg_latein,容器,假);
    设置选项菜单(真);
    返回视图;
    }
    @凌驾
    已创建ActivityState上的公共无效(Bundle savedInstanceState){
    Log.d(“frglastein”,“onActivityCreated”);
    super.onActivityCreated(savedInstanceState);
    }
    @凌驾
    public void onStart(){
    Log.d(“FrgLatein”、“onStart”);
    super.onStart();
    新建LongOperation1()。执行(“”);
    }
    私有类LongOperation1扩展异步任务{
    @凌驾
    受保护的字符串doInBackground(字符串…参数){
    //Web服务在这里长期运行吗
    试一试{
    字符串url=此处的url\u;
    HttpGet HttpGet=新的HttpGet(url);
    ResponseHandler ResponseHandler=新BasicResponseHandler();
    text=Client.execute(httpget,responseHandler);
    }
    捕获(例外情况除外){
    text=ex.getLocalizedMessage();
    }
    返回“已执行”;
    }
    @凌驾
    受保护的void onPostExecute(字符串结果){
    //在这里执行UI任务
    }
    @凌驾
    受保护的void onPreExecute(){
    //在这里执行UI任务
    }
    @凌驾
    受保护的void onProgressUpdate(void…值){
    //在这里执行UI任务,这必须在后台任务像下载过程一样运行时完成
    }
    }
    }
    
    请打破悬念,例外是……这很容易。异常可能是
    NetworkOnMainThreadException
    或它的名称。顺便说一句:尽量避免捕获所有对象(
    catch(异常示例)