Android:如何在不在应用上加载网站的情况下调用网站

时间:2015-11-09 16:25:13

标签: java android web

我在visual studio上用c#编写了一个web应用程序,它运行一个我可以传递数据的网站。 在我的Android应用程序中,如何在不执行任何额外步骤的情况下使用我的附加数据调用此网站URL?

我已经能够访问该网站,但它在我的应用程序上加载了网站,我想每秒将数据传递到该网站,所以每次加载网页都不是我想要的方向进去。

如何将数据发送到网站,尽可能少地加载数据?

(当我写的时候,在加载尽可能少的数据时,我的意思是,我不希望我的应用程序明显加载网站并显示它,我只想打电话给网站)

感谢您阅读,以及您可以为我提供的任何指示!

更新: 这是我目前正在努力工作的代码,由于某种原因我无法弄清楚

public class MainActivity extends AppCompatActivity {

private TextView urlReturn;

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

    String url = "http://10.0.2.2/test/Default.aspx";
    String urlParameters =
            null;
    try {
        urlParameters = "payload=" + URLEncoder.encode("AndroidTest", "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    urlReturn = (TextView)findViewById(R.id.webStatus);
    urlReturn.setText("Return: " + executePost(url, urlParameters));

}
public static String executePost(String targetURL, String urlParameters) {
    URL url;
    HttpURLConnection connection = null;
    try {
        //Create connection
        url = new URL(targetURL);
        connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded");

        connection.setRequestProperty("Content-Length", "" +
                Integer.toString(urlParameters.getBytes().length));
        connection.setRequestProperty("Content-Language", "en-US");

        connection.setUseCaches(false);
        connection.setDoInput(true);
        connection.setDoOutput(true);

        //Send request
        DataOutputStream wr = new DataOutputStream(
                connection.getOutputStream());
        wr.writeBytes(urlParameters);
        wr.flush();
        wr.close();

        //Get Response
        InputStream is = connection.getInputStream();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
        String line;
        StringBuffer response = new StringBuffer();
        while ((line = rd.readLine()) != null) {
            response.append(line);
            response.append('\r');
        }
        rd.close();
        return response.toString();

    } catch (Exception e) {

        e.printStackTrace();
        return "Fail!";

    } finally {

        if (connection != null) {
            connection.disconnect();
        }
    }
}}

所以这次每次都会失败,我相信我离这儿不远......

更新2: 我需要在异步任务中运行调用我相信,我会在完成后发布我的代码。

2 个答案:

答案 0 :(得分:0)

我不知道这实际上是否对您有帮助,但您可以为您的Android应用程序创建一个服务,该服务将通过Web服务连接到您的服务器。

答案 1 :(得分:0)

因此,如果它是一个POST调用,这将略有不同,但最简单的方法是GET调用。通常,从广义上讲(如果服务器设置不同,这可能会有所不同),GET POST和UPDATE就是这样的:

获取:获取一个网站,可能有一些参数 POST:将数据发送到网站,如表单或登录 更新:更新网站上的内容,通常像数据库记录。

因此对于GET,网址设置如下: http://www.somewebsite.com?param1&param2&param3&param3

注意第一个?对于第一个参数然后&对于那之后的每个个体的参数。

所以你需要2个文件,一个布局和一个类。

在您的布局文件(您的xml布局文件。在此示例中,我将其命名为myXMLLayoutFile.xml)中,您需要添加webview。这样的事情会起作用:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/my_webView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:clickable="true"
        android:layoutMode="opticalBounds"
        android:padding="0dp" />

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />
</RelativeLayout>

(我添加了一个进度条,以防这需要一段时间才能加载,但你可以删除它)

然后在您的类文件(您的java文件)中,您可以执行以下操作:

public class MyClass extends Activity 
{
    ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.myXMLLayoutFile);

        progressBar = (ProgressBar) findViewById(R.id.progressBar1);
        progressBar.setVisibility(View.VISIBLE);

        WebView webView = (WebView)findViewById(R.id.my_webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("http://www.someurl.com?param1&param2&param3");

        webView.setWebChromeClient(new WebChromeClient()
        {
            @Override
            public void onProgressChanged(WebView view, int newProgress)
            {
                if (newProgress == 100)
                    progressBar.setVisibility(View.GONE);
            }
        });
    }
}

如果您有疑问,请告诉我。

爱德华