繁体   English   中英

连接到远程服务器的Android应用程序

[英]Android Application that connects to remote server

我正在尝试在2.2平台Froyo上构建一个Android应用程序。 该应用程序应该连接到远程服务器,从中获取数据并以其他语言显示给用户。

  • 所以我的问题是-我需要学习什么技术才能构建上述应用程序。

注意-我已经安装了Android平台,并已构建了诸如Hello,world之类的简单应用。 我知道Java。 我也在使用Eclipse。

谢谢您的回答。 请不要粗鲁的评论...

// --------------使用HTTP协议连接到Web的代码----------------- //

package in.androidbook.Networking;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity 
{
    ImageView img;
    /* This is for making asynchronous calls to ensure that connection to server will not return until data is received */

    private class BackgroundTask extends AsyncTask<String, Void, Bitmap>
    {
        protected Bitmap doInBackground(String...url)
        {
            Bitmap bitmap = DownloadImage(url[0]);
            return bitmap;
        }

        protected void onPostExecute(Bitmap bitmap)
        {
            ImageView img = (ImageView) findViewById(R.id.img);
            img.setImageBitmap(bitmap);         
        }
    }
    // Code for making HTTP connection
    private InputStream OpenHttpConnection(String urlString) throws IOException 
    {
        InputStream in = null;
        int response = -1;

        URL url = new URL(urlString);//We take an object of class URL
        URLConnection conn = url.openConnection(); //Create a connection object and open the connection

        if(!(conn instanceof HttpURLConnection)) throw new IOException("Not an Http connection");
        try
        {
            HttpURLConnection httpConn = (HttpURLConnection) conn; //httpConn object is assigned the value of conn. Typecasting is done to avoid conflict.
            httpConn.setAllowUserInteraction(false);
            httpConn.setInstanceFollowRedirects(true);
            httpConn.setRequestMethod("GET");
            httpConn.connect();
            response = httpConn.getResponseCode();

            if(response == HttpURLConnection.HTTP_OK)
                in = httpConn.getInputStream();
        }
        catch (Exception ex)
        {
            throw new IOException("Error connecting");
        }
        return in;
    }   
        //------------------------------------------ OpenHttpConnection method completed----------------------------------------------------------//
    //----------------------------------------------------------------------------------------------------------------------------------------------------------------//
    //-------------------------------Method to download an image--------------------------------------------------------------------------------------//
    private Bitmap DownloadImage(String URL)
    {
        Bitmap bitmap = null;
        InputStream in = null;
        try
        {
            in = OpenHttpConnection(URL);
            bitmap = BitmapFactory.decodeStream(in);
            in.close();
        }
        catch(IOException e1)
        {
            Toast.makeText(this, e1.getLocalizedMessage(), Toast.LENGTH_LONG).show();
            //Toast displays a short msg to user. this refers to current object.
            e1.printStackTrace();
        }
        return bitmap;
    }  


/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

       Bitmap bitmap = DownloadImage("http://i.zdnet.com/blogs/3-29-androids.jpg");
        img = (ImageView) findViewById(R.id.img);
        img.setImageBitmap(bitmap);
    }
}

更新(基于评论):当我们谈论客户端时,我确认我的回答。 如果该网站不是您的网站,则首先需要检查它如何/是否允许通过API进行某种形式的通信以及采用哪种格式(最常用XML和JSON)。 有了这些信息,它应该很容易。 看一下使用Google Map或Twitter的Android示例,您应该找到一些示例。

好吧,这取决于您的确切意思是:您是否在要求客户端(应用程序)所需的技能-是因为服务器已经构建或将由其他人构建,还是服务器所需的技能? ?

在前一种情况下,我建议与REST API和JSON进行通信。 看一下Apache HTTPGet,HTTPClient和HTTPResponse类以及org.json(所有都包含在Android中)。 如果要使用它们进行测试,请使用一些公共API(这样就不必担心服务器),例如Google Map API(它很简单,在某些限制下可以免费使用)。

在后一种情况下,我使用ColWinters:如果您知道Java,也可以在其中使用它,并将Tomcat作为服务器和基本的Servlet。 您会在Internet上找到大量示例。

查找这些技术,

Apache Tomcat-Java服务器页面(服务器处理)MySQL(数据存储)

就是这样。 另外,请确保在单独的线程(例如来自活动的异步任务)中执行请求。

如果您知道Java,我建议将servlet作为服务托管在服务器上,该服务器从mysql或anydatabase读取数据并将其构造为json。 在您的Android应用中,将buit httpclient中的http使用到远程servlet并解析json响应。 所以。 如果您的应用程序是电话应用程序的本机,则Servlets,Httpclient,Json涵盖了大多数内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM