我创建了一个小应用程序,使用此应用程序,我想将数据(通过wifi或蓝牙)发送到PC /服务器。
我正在考虑创建一个可在PC上运行的网络服务,并会不断收听任何传入的客户请求。
一旦收到来自客户端的请求,就会进行数据传输。在webservice收到数据后,它会自动打开一个显示收到数据的应用程序/ GUI窗口。
我的问题是我可以在JAVA中使用TCP / IP创建Web服务并让它在后台持续运行并收听客户端请求吗? 另外,如果webservice检测到客户端请求并收到数据,我该如何启动GUI?
答案 0 :(得分:1)
我建议在服务器端使用WS,并且可以在客户端使用Ksoap android library。我认为你的个人opninios是正确的:)创建一个后台线程,用新的数据更新UI。使用适合您的解决方案的AsyncTask,Loader或Handler。 (阅读more info的官方参考资料)。
我希望它能帮助你!
答案 1 :(得分:1)
使用SQL Server管理桌面上的数据,并在Visual Studio上使用.NET创建Web服务。
然后连接到应用程序中的Web服务,并使用Web服务从数据库设置/获取数据。
可能有用的链接:
如何在.NET中创建Web服务(不包括Android中的实现): http://srikanthtechnologies.com/blog/dotnet/wsdaljava.aspx
如何将您的服务与Android相关联:
http://seesharpgears.blogspot.in/2010/11/basic-ksoap-android-tutorial.html
http://www.codeproject.com/Articles/304302/Calling-Asp-Net-Webservice-ASMX-From-an-Android-Ap
http://adrianandroid.blogspot.in/2012/05/access-c-net-web-service-in.html
答案 2 :(得分:1)
最好的方法是创建Web服务并将应用程序连接到Web服务,您可以使用工具http://www.wsdl2code.com创建连接和解析数据所需的所有代码:)
答案 3 :(得分:1)
http://sidharthkumargth.github.io/UserConnection
或
https://github.com/sidharthkumargth/UserConnection
从上面的链接下载此userconnection.jar并导入您的库
示例:
public class MainActivity extends Activity implements ConnectionStatusListener
{
UserConnection uc,uc1;
ImageView iv;
TextView tv;
ProgressBar pb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getActionBar().setSubtitle("Only for test");
iv=(ImageView)findViewById(R.id.imageView1);
tv=(TextView)findViewById(R.id.ttt);
pb=(ProgressBar)findViewById(R.id.progressBar1);
uc=new UserConnection(2); // here 2 is number of objects sent to web service email and password, if the number of objects is n then it will be uc=new UserConnection(n);
uc.setHTTPMethod("POST");
uc.setupValues("email", "test@gmail.com");
uc.setupValues("password", "test");
uc.setConnectionStatusListener(this);
//uc.startConnection("http://test.com/tb/login.php");
//uc.startDownloadfrom("http://www.kingsoftstore.com/images/presentation-templates/report-ppt-template-059.dpt","/sdcard/downloadedfile.jpg");
//uc.startDownloadImage("http://i00.i.aliimg.com/wsphoto/v0/1157302568/2013-girls-new-style-popular-purple-sexy-lingeries-LC1105-free-shipping.jpg");
uc.startDownloadfrom("http://www.technotrigger.com/wp-content/uploads/2014/01/house-in-green-field.jpg","/sdcard/downloadedfile1.jpg");
uc.startDownloadfrom("http://upload.wikimedia.org/wikipedia/commons/3/36/Hopetoun_falls.jpg","/sdcard/downloadedfile2.jpg");
uc.startDownloadfrom("http://upload.wikimedia.org/wikipedia/commons/1/1a/Bachalpseeflowers.jpg","/sdcard/downloadedfile3.jpg");
uc.startDownloadfrom("http://tmacfitness.com/wp-content/uploads/2013/04/Beauty-of-nature-random-4884759-1280-800.jpg","/sdcard/downloadedfile4.jpg");
uc.startDownloadfrom("http://freedwallpaper.com/wp-content/uploads/2014/03/6-autumn-nature-sandbox-images_2053316.jpg","/sdcard/downloadedfile5.jpg");
//uc.startMultipartConnection("http://www.google.co.in");
uc1=new UserConnection(0);
uc1.setHTTPMethod("GET");
//"/sdcard/downloadedfile.jpg"
uc1.setConnectionStatusListener(this);
uc1.startConnection("http://www.facebook.com");
}
//Toast.makeText(getApplicationContext(), message, 1).show();
@Override
public void onError(Status arg0) {
// TODO Auto-generated method stub
try {
Toast.makeText(getApplicationContext(), "error"+arg0.getErrorMessage(), 1).show();
} catch (UserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onStart(Status arg0) {
// TODO Auto-generated method stub
try{
if(arg0.getConnectionHolder()==uc){
Toast.makeText(getApplicationContext(), "uc"+arg0.getMessage(), 1).show();
}else if(arg0.getConnectionHolder()==uc1){
Toast.makeText(getApplicationContext(), "uc1"+arg0.getMessage(), 1).show();
}
}catch(UserException e){}
}
@Override
public void onStop(Status arg0) {
// TODO Auto-generated method stub
//Log.d(arg0.getConnectionHolder().toString(), arg0.getResponse()+"");
try {
iv.setImageDrawable(Drawable.createFromPath(arg0.getFile()));
//Toast.makeText(getApplicationContext(), arg0.getConnectionHolder()+"++"+arg0.getResponse(), Toast.LENGTH_LONG).show();
} catch (UserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onProgressUpdate(Status arg0) {
// TODO Auto-generated method stub
try {
tv.setText("Progress "+arg0.getProgress());
pb.setProgress(arg0.getProgress());
} catch (UserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 4 :(得分:0)
您可以通过使用node.js或php创建端点/路由,然后将其托管在云上来轻松实现此目的。我想我现在喜欢使用Firebase进行托管,您可能会想尝试一下它真的很酷。在创建将要连接到您的数据库的终结点之后,您将根据您想要从您的移动应用程序中的数据库获取的内容使用http get或post请求。 如果您是为Android创建的,则对HTTP连接使用Retrofit。