我在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: 我需要在异步任务中运行调用我相信,我会在完成后发布我的代码。
答案 0 :(得分:0)
我不知道这实际上是否对您有帮助,但您可以为您的Android应用程序创建一个服务,该服务将通过Web服务连接到您的服务器。
答案 1 :(得分:0)
因此,如果它是一个POST调用,这将略有不同,但最简单的方法是GET调用。通常,从广义上讲(如果服务器设置不同,这可能会有所不同),GET POST和UPDATE就是这样的:
获取:获取一个网站,可能有一些参数 POST:将数据发送到网站,如表单或登录 更新:更新网站上的内容,通常像数据库记录。
因此对于GET,网址设置如下: http://www.somewebsite.com?param1¶m2¶m3¶m3
注意第一个?对于第一个参数然后&对于那之后的每个个体的参数。
所以你需要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¶m2¶m3");
webView.setWebChromeClient(new WebChromeClient()
{
@Override
public void onProgressChanged(WebView view, int newProgress)
{
if (newProgress == 100)
progressBar.setVisibility(View.GONE);
}
});
}
}
如果您有疑问,请告诉我。
爱德华