2014-12-28 3 views
0

Я кодирую различные приложения с Android, и большинство из них используют Интернет для общения с сервером. Я искал, как закодировать проект, чтобы позволить общаться с Android с сервером. Ну я уже закодированный код, необходимый для проверки: 1) Устройство подключено к Интернету 2) URL-адрес назначения корректируется письменного 3) Сервер доКак закодировать подключение к Интернету под Android?

Так что я не спрашиваю, как чтобы проверить это, но где/как помещать эти методы в мой код. Например, моему приложению необходимо отправить HTTP-запрос на сервер со строкой (например, имя). Поэтому я закодировал AsynTask, который требует ввода двух строк (IP и параметр), и все. Должен ли я проверить, все ли в порядке, прежде чем отправить AsynTask или в этот класс? Заранее благодарим за ваш ответ.

+0

Для вопросов по программированию я рекомендую вам посетить http://programmers.stackexchange.com/. – seebiscuit

+0

Кажется, вам просто нужно выбрать набор принципов/шаблонов. Принцип единой ответственности - хорошее начало. – keyser

ответ

0

Прежде всего, вы не можете запускать Network on Main Thread, это для вас, чтобы вы знали. И теперь вам нужны сообщения для 2-го кода. Сначала нужно загрузить определенный файл на сервер, а во-вторых, как связаться с сервером mysql android.Second плохо дал ссылку для учебника о том, что он полностью работает с исходным кодом, доступным для download.So позволяет начать. Первый код для загрузки файла на сервер.

package com.androidexample.uploadtoserver; 

import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class UploadToServer extends Activity { 

    TextView messageText; 
    Button uploadButton; 
    int serverResponseCode = 0; 
    ProgressDialog dialog = null; 

    String upLoadServerUri = null; 

    /********** File Path *************/ 
    final String uploadFilePath = "/mnt/sdcard/"; 
    final String uploadFileName = "test.jpg"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_upload_to_server); 

     uploadButton = (Button)findViewById(R.id.uploadButton); 
     messageText = (TextView)findViewById(R.id.messageText); 

     messageText.setText("Uploading file path :- '/mnt/sdcard/"+uploadFileName+"'"); 

     /************* Php script path ****************/ 
     upLoadServerUri = "http://54.148.41.171/UploadToServer.php"; 

     uploadButton.setOnClickListener(new OnClickListener() {    
      @Override 
      public void onClick(View v) { 

       dialog = ProgressDialog.show(UploadToServer.this, "", "Uploading file...", true); 

       new Thread(new Runnable() { 
         public void run() { 
          runOnUiThread(new Runnable() { 
            public void run() { 
             messageText.setText("uploading started....."); 
            } 
           });      

          uploadFile(uploadFilePath + "" + uploadFileName); 

         } 
         }).start();   
       } 
      }); 
    } 

    public int uploadFile(String sourceFileUri) { 


      String fileName= sourceFileUri; 

      HttpURLConnection conn = null; 
      DataOutputStream dos = null; 
      String lineEnd = "\r\n"; 
      String twoHyphens = "--"; 
      String boundary = "*****"; 
      int bytesRead, bytesAvailable, bufferSize; 
      byte[] buffer; 
      int maxBufferSize = 1 * 1024 * 1024; 
      File sourceFile = new File(sourceFileUri); 
      if (!sourceFile.isFile()) { 



       dialog.dismiss(); 

       Log.e("uploadFile", "Source File not exist :" 
            +uploadFilePath + "" + uploadFileName); 

       runOnUiThread(new Runnable() { 
        public void run() { 
         messageText.setText("Source File not exist :" 
           +uploadFilePath + "" + uploadFileName); 
        } 
       }); 

       return 0; 

      } 
      else 
      { 

       try { 

        // open a URL connection to the Servlet 
        FileInputStream fileInputStream = new FileInputStream(sourceFile); 
        URL url = new URL(upLoadServerUri); 

        // Open a HTTP connection to the URL 
        conn = (HttpURLConnection) url.openConnection(); 
        conn.setDoInput(true); // Allow Inputs 
        conn.setDoOutput(true); // Allow Outputs 
        conn.setUseCaches(false); // Don't use a Cached Copy 
        conn.setRequestMethod("POST"); 
        conn.setRequestProperty("Connection", "Keep-Alive"); 
        conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
        conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
        conn.setRequestProperty("uploaded_file", fileName); 


        dos = new DataOutputStream(conn.getOutputStream()); 

        dos.writeBytes(twoHyphens + boundary + lineEnd); 
        dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" 
              + fileName + "\"" + lineEnd); 

        dos.writeBytes(lineEnd); 

        // create a buffer of maximum size 
        bytesAvailable = fileInputStream.available(); 

        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        buffer = new byte[bufferSize]; 

        // read file and write it into form... 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

        while (bytesRead > 0) { 

        dos.write(buffer, 0, bufferSize); 
        bytesAvailable = fileInputStream.available(); 
        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

        } 

        // send multipart form data necesssary after file data... 
        dos.writeBytes(lineEnd); 
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

        // Responses from the server (code and message) 
        serverResponseCode = conn.getResponseCode(); 
        String serverResponseMessage = conn.getResponseMessage(); 

        Log.i("uploadFile", "HTTP Response is : " 
          + serverResponseMessage + ": " + serverResponseCode); 

        if(serverResponseCode == 200){ 

         runOnUiThread(new Runnable() { 
          public void run() { 

           String msg = "File Upload Completed.\n\n See uploaded file here : \n\n" 
               +" http://www.androidexample.com/media/uploads/" 
               +uploadFileName; 

           messageText.setText(msg); 
           Toast.makeText(UploadToServer.this, "File Upload Complete.", 
              Toast.LENGTH_SHORT).show(); 
          } 
         });     
        }  

        //close the streams // 
        fileInputStream.close(); 
        dos.flush(); 
        dos.close(); 

       } catch (MalformedURLException ex) { 

        dialog.dismiss(); 
        ex.printStackTrace(); 

        runOnUiThread(new Runnable() { 
         public void run() { 
          messageText.setText("MalformedURLException Exception : check script url."); 
          Toast.makeText(UploadToServer.this, "MalformedURLException", Toast.LENGTH_SHORT).show(); 
         } 
        }); 

        Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
       } catch (Exception e) { 

        dialog.dismiss(); 
        e.printStackTrace(); 

        runOnUiThread(new Runnable() { 
         public void run() { 
          messageText.setText("Got Exception : see logcat "); 
          Toast.makeText(UploadToServer.this, "Got Exception : see logcat ", 
            Toast.LENGTH_SHORT).show(); 
         } 
        }); 
        Log.e("Upload file to server Exception", "Exception : " 
                + e.getMessage(), e); 
       } 
       dialog.dismiss();  
       return serverResponseCode; 

      } // End else block 
     } 
} 

и вот код на стороне сервера

$file_path = "uploads/"; 
$file_path = $file_path . basename($_FILES['uploaded_file']['name']); 
if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) { 
    echo "success"; 
} else{ 
    echo "fail"; 
} 
?> 

Очарование этого кода является то, что вы можете вставить в MainActivity так означает, что вы можете запустить этот код на основной поток без необходимости делать в фоновом режиме вкусные не так ли? :) теперь позволяет добраться до 2-го, где вы можете общаться с MySQL сервером значительно! И почти не забывайте, что вы должны создать папку загрузки на серверной стороне :)

http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/

И вот учебник, в котором я ВЕЛИКАЙ, верьте мне! Наслаждайтесь :)

+0

Благодарим вас за ответ. Ну, вы, вероятно, ответите на возможное решение, которое я искал. С точки зрения кодирования, класс кажется слишком длинным, но он работает. Как вы думаете, можно ли создать эту попытку и поймать в AsyncTask? Как вы считаете, лучше проверить активность, если соединение в порядке? В этом случае принцип SR не соблюдается. –

+0

Хорошо, сначала вам не нужно использовать async-задачу, потому что вы не можете использовать try и catch, поэтому вряд ли вы поймете, что произошло, если java не смогла выполнить asynvtask, верьте мне, я изо всех сил пытаюсь за 4 месяца! И как насчет проверки активности подключения, это БОЛЬШОЙ, потому что он полностью проверяет наличие каких-либо возможностей в Интернете и как нить ira, но мощная функция, поэтому я так счастлив услышать, что могу помочь вам поверить мне im.in восторга :)))) – BiggDawgg

+0

О, и как насчет долготы? – BiggDawgg