使用Web Service实现Android应用与VB.NET服务器数据收发及存图求助
Hey there! Let's break this down step by step since you're new to both Android and .NET Web Services—this is totally manageable for your thesis project, don't worry.
First, you need to create a web service method on your existing VB.NET server that can accept image data from your Android app, save it to your server/database, and sync with your site's existing database.
Since you're working with VB.NET, an ASMX Web Service is a straightforward starting point (it's older but simpler for beginners):
- In your VB.NET website project, right-click > Add > New Item > Select "Web Service (ASMX)" and name it something like
ImageUploadService.asmx. - Open the code-behind file (
ImageUploadService.vb) and add a web method to handle image uploads. Here's a basic example that accepts a Base64-encoded image string and filename, saves the image to your server's directory, and logs it to your database:
Imports System.Web.Services Imports System.IO Imports System.Data.SqlClient ' Adjust this based on your database provider <WebService(Namespace:="http://yourdomain.com/ImageUpload")> <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> Public Class ImageUploadService Inherits System.Web.Services.WebService <WebMethod()> Public Function UploadImage(imageBase64 As String, fileName As String) As String Try ' Decode Base64 string to byte array Dim imageBytes As Byte() = Convert.FromBase64String(imageBase64) ' Define save path (make sure the UploadedImages folder exists and has write permissions) Dim savePath As String = Server.MapPath("~/UploadedImages/") & fileName File.WriteAllBytes(savePath, imageBytes) ' Insert record into your existing database Dim connString As String = "YourExistingDatabaseConnectionString" ' Use your site's actual connection string Using conn As New SqlConnection(connString) conn.Open() Dim query As String = "INSERT INTO Images (FileName, FilePath, UploadDate) VALUES (@FileName, @FilePath, GETDATE())" Using cmd As New SqlCommand(query, conn) cmd.Parameters.AddWithValue("@FileName", fileName) cmd.Parameters.AddWithValue("@FilePath", "~/UploadedImages/" & fileName) cmd.ExecuteNonQuery() End Using End Using Return "Success: Image uploaded and database updated" Catch ex As Exception Return "Error: " & ex.Message End Try End Function End Class
- Test this first: Run your website, navigate to
ImageUploadService.asmx, and use the built-in test form to send a sample Base64 string to verify it works.
You mentioned knowing Volley, so we'll use it to send the image as a Base64 string in a JSON payload (simple for beginners, though note Base64 adds ~30% size overhead—perfectly fine for a thesis project with small-to-medium images).
First, add required permissions to AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- For accessing gallery images -->
Core upload logic (convert image to Base64 and send via Volley):
import com.android.volley.Request import com.android.volley.RequestQueue import com.android.volley.Response import com.android.volley.toolbox.JsonObjectRequest import com.android.volley.toolbox.Volley import org.json.JSONObject import android.graphics.Bitmap import android.util.Base64 import java.io.ByteArrayOutputStream // Inside your Activity/Fragment private lateinit var requestQueue: RequestQueue override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) requestQueue = Volley.newRequestQueue(this) } // Call this function when you have a Bitmap of the image to upload private fun uploadImageToServer(bitmap: Bitmap, fileName: String) { // Convert Bitmap to Base64 string val byteArrayOutputStream = ByteArrayOutputStream() bitmap.compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream) val imageBytes = byteArrayOutputStream.toByteArray() val imageBase64 = Base64.encodeToString(imageBytes, Base64.DEFAULT) // Build JSON payload val jsonParams = JSONObject() jsonParams.put("imageBase64", imageBase64) jsonParams.put("fileName", fileName) // Replace with your server's actual web service URL val url = "http://your-server-domain.com/ImageUploadService.asmx/UploadImage" // Create Volley POST request val jsonRequest = object : JsonObjectRequest( Request.Method.POST, url, jsonParams, Response.Listener { response -> // Handle success response (ASMX wraps results in a "d" property) val result = response.getString("d") // Show success message to user, update UI, etc. }, Response.ErrorListener { error -> // Handle network/server errors error.printStackTrace() // Show user-friendly error message } ) { // Set content type to JSON override fun getHeaders(): MutableMap<String, String> { val headers = HashMap<String, String>() headers["Content-Type"] = "application/json; charset=utf-8" return headers } } // Add request to queue requestQueue.add(jsonRequest) }
- For picking images from the gallery/camera, you can use a simple intent—there are plenty of beginner-friendly tutorials for that if you need it.
- Test incrementally: First get the web service working alone, then test sending a simple JSON from Android, then add the image conversion.
- Database sync: Use the same connection string as your VB.NET website to ensure uploads appear on your site automatically.
- Error handling: Add try/catch blocks on both ends, and show user-friendly messages in your Android app (don't just log errors).
- Bonus security: If you want to add basic protection, you can add an API key check to your web service method.
内容的提问来源于stack exchange,提问作者iRJ

