Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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/197.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中,使用web服务的HTTP客户端的最佳实现是什么_Java_Android_Web Services_Rest - Fatal编程技术网

Java 在Android中,使用web服务的HTTP客户端的最佳实现是什么

Java 在Android中,使用web服务的HTTP客户端的最佳实现是什么,java,android,web-services,rest,Java,Android,Web Services,Rest,我有下面的RESTful代码,它访问这个web服务并发布一个值并获得一个返回。但是,正如您所看到的,该代码可以工作,它位于onCreate()方法的main活动中。我不必详细解释这是一种不好的做法。那么,为了让应用程序具有最佳性能且不会崩溃,我应该做些什么来放置此代码。我想我想要的是一种设计模式,以便使用HTTPClient实现最健壮的应用程序来使用web服务。谢谢 公共类MainActivity扩展活动{ @凌驾 公共布尔onCreateOptions菜单(菜单){ getMenuInfla

我有下面的RESTful代码,它访问这个web服务并发布一个值并获得一个返回。但是,正如您所看到的,该代码可以工作,它位于onCreate()方法的main活动中。我不必详细解释这是一种不好的做法。那么,为了让应用程序具有最佳性能且不会崩溃,我应该做些什么来放置此代码。我想我想要的是一种设计模式,以便使用HTTPClient实现最健壮的应用程序来使用web服务。谢谢

公共类MainActivity扩展活动{
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.activity\u主菜单);
返回true;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(策略);
BufferedReader in=null;
试一试{
HttpClient=new DefaultHttpClient();
HttpPost请求=新建HttpPost(
"http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit");
request.addHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
List postParameters=new ArrayList();
添加(新的BasicNameValuePair(“摄氏度”、“77”);
UrlEncodedFormEntity formEntity=新的UrlEncodedFormEntity(后参数);
请求。setEntity(formEntity);
HttpResponse response=client.execute(请求);
in=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent());
StringBuffer sb=新的StringBuffer(“”);
字符串行=”;
字符串NL=System.getProperty(“line.separator”);
而((line=in.readLine())!=null){
sb.追加(行+NL);
}
in.close();
字符串页=sb.toString();
//Log.i(标签,第页);
系统输出打印项次(第页);
}捕获(例外e){
e、 printStackTrace();
}最后{
if(in!=null){
试一试{
in.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
}

}

我会将其放在一个类中,并在其构造函数中设置所有内容,并从活动中调用其方法。

您可能希望将该代码放入AsyncTask中,这样启动时应用程序的性能就不会受到影响。我想这就是你要找的。
public class MainActivity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    BufferedReader in = null;
    try {
        HttpClient client = new DefaultHttpClient();
        HttpPost request = new HttpPost(
                "http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit");
        request.addHeader("Content-Type", "application/x-www-form-urlencoded");
        List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
        postParameters.add(new BasicNameValuePair("Celsius", "77"));
        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
        request.setEntity(formEntity);

        HttpResponse response = client.execute(request);

        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        StringBuffer sb = new StringBuffer("");
        String line = "";
        String NL = System.getProperty("line.separator");
        while ((line = in.readLine()) != null) {
            sb.append(line + NL);
        }
        in.close();

        String page = sb.toString();
        // Log.i(tag, page);
        System.out.println(page);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}