You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySingleton报错求助:物理设备访问本地XAMPP服务器遇问题

Fixing MySingleton Errors When Connecting to Local XAMPP Server on Physical Device

Hey there! Let's work through this MySingleton issue you're hitting. Since you've already added the internet permission and Volley dependency, let's dive into the most likely culprits:

1. Verify Your MySingleton Implementation

Volley's singleton pattern is easy to misconfigure—double-check yours against this standard, leak-safe implementation:

import android.content.Context;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

public class MySingleton {
    private static MySingleton instance;
    private RequestQueue requestQueue;
    private static Context appContext;

    private MySingleton(Context context) {
        appContext = context.getApplicationContext();
        requestQueue = getRequestQueue();
    }

    public static synchronized MySingleton getInstance(Context context) {
        if (instance == null) {
            instance = new MySingleton(context);
        }
        return instance;
    }

    public RequestQueue getRequestQueue() {
        if (requestQueue == null) {
            // Use application context to avoid memory leaks
            requestQueue = Volley.newRequestQueue(appContext);
        }
        return requestQueue;
    }

    public <T> void addToRequestQueue(Request<T> req) {
        getRequestQueue().add(req);
    }
}

Key checks here:

  • Private constructor to enforce singleton behavior
  • synchronized on getInstance() to prevent thread conflicts
  • Using getApplicationContext() instead of an Activity context (avoids memory leaks and context-related crashes)
  • RequestQueue is initialized only once

2. Ensure Network Connectivity Between Device and Laptop

Your physical device and laptop must be on the same WiFi network. Then:

  • Find your laptop's local IP address:
    • Windows: Run ipconfig in Command Prompt, look for "IPv4 Address" under your WiFi adapter
    • Mac/Linux: Run ifconfig or ip addr in Terminal, find your WiFi interface's IP
  • Replace localhost in your API URL with this IP (e.g., http://192.168.1.105/your_api_endpoint.php). localhost on the device points to itself, not your laptop!
  • Test the URL in your device's browser first—if it loads, your XAMPP server is reachable; if not, check Apache is running and your firewall isn't blocking the port.

3. Check MainActivity's MySingleton Usage

Make sure you're calling the singleton correctly without passing invalid context:

// Example GET request in MainActivity
String apiUrl = "http://YOUR_LAPTOP_IP/your_script.php";
StringRequest stringRequest = new StringRequest(Request.Method.GET, apiUrl,
        response -> {
            // Handle successful response here
        },
        error -> {
            // Print error details to debug
            error.printStackTrace();
        });

// Pass a valid context (this = MainActivity context)
MySingleton.getInstance(this).addToRequestQueue(stringRequest);

If you're passing null or a destroyed context, that'll trigger errors. Also, use the error callback to log the full stack trace—it'll tell you exactly what's failing (e.g., network timeout, invalid URL).

4. Fix AndroidManifest.xml Configuration

Double-check your permissions and cleartext traffic settings:

  • Ensure internet permission is at the root of your <manifest> tag (not inside <application>):
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- Optional but helpful for network checks -->
    
  • For Android 9 (API 28) and above, add cleartext traffic permission to <application> (since XAMPP uses HTTP, not HTTPS):
    <application
        ...
        android:usesCleartextTraffic="true">
        <!-- Your activities/services here -->
    </application>
    

This is a super common oversight that causes network-related crashes with local servers.

5. Confirm Volley Dependency Compatibility

Make sure your Module-level build.gradle has a compatible Volley version:

dependencies {
    implementation 'com.android.volley:volley:1.2.1'
}

Older versions might conflict with newer Android SDKs—sticking to the latest stable version avoids unexpected issues.

If you still run into problems, share your MySingleton code and the exact error stack trace, and we can narrow it down further!

内容的提问来源于stack exchange,提问作者user9102262

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:58:36