Android-приложение, которое подключается к удаленному серверу - PullRequest
0 голосов
/ 14 января 2012

Я пытаюсь создать приложение для Android на платформе 2.2 Froyo. Предполагается, что приложение должно подключаться к удаленному серверу, получать с него данные и отображать их пользователю на другом языке.

  • Итак, мой вопрос - Какие технологии мне нужно изучить, чтобы я мог создайте приложение выше.

Примечание. Я уже установил платформу Android и создал простые приложения, такие как Hello, world. Я знаю Java. Также я использую Eclipse.

Спасибо за ваши ответы. Грубый комментарий, пожалуйста ...

// -------------- Код для подключения к сети по протоколу HTTP ----------------- //

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);
    }
}

Ответы [ 3 ]

2 голосов
/ 14 января 2012

ОБНОВЛЕНО (основано на комментарии): Поскольку мы говорим о клиентской стороне, я подтверждаю свой ответ. Если сайт не ваш, первое, что вам нужно сделать, если проверить, как / если он допускает какую-то связь через API, и в каком формате (наиболее часто используются XML и JSON). С этой информацией все должно быть довольно просто. Взгляните на пример Android, используя Google Map или Twitter, вы должны найти его.

Ну, это зависит от того, что именно вы имеете в виду: запрашиваете ли вы навыки, необходимые на стороне клиента (в приложении) - в идее, что сервер уже создан или будет кем-то другим, или в необходимых навыках для сервера?

В первом случае я бы посоветовал общаться с REST API и JSON. Взгляните на apache HTTPGet, HTTPClient и HTTPResponse class и org.json (все они включены в Android). Если вы хотите протестировать их, используйте некоторые общедоступные API-интерфейсы (чтобы вам не приходилось беспокоиться о сервере), например, API-интерфейс Google Map (который прост и бесплатен для использования с некоторыми ограничениями).

В последнем случае я использую ColWinters: если вы знаете java, используйте его там же, с Tomcat в качестве сервера и базового сервлета. В Интернете вы найдете множество примеров.

1 голос
/ 14 января 2012

Если вы знаете Java, я бы предложил сервлет в качестве службы, размещенной на сервере, который считывает данные из mysql или anydatabase и создает как json. в вашем приложении для Android сделайте http, используя встроенный httpclient для удаленного сервлета, и проанализируйте ответ json. Так. Servlets, Httpclient, Json покрывают большинство, если ваше приложение является родным для приложения телефона.

1 голос
/ 14 января 2012

Посмотрите эти технологии,

Apache Tomcat - страницы сервера Java (обработка сервера) MySQL (хранилище данных)

и все. Также убедитесь, что запрос выполняется в отдельном потоке, например Async Task, из действия.

...