Saya sedang mengerjakan proyek Android Studio dengan beberapa aktivitas. Saat ini saya mencoba membaca output dari Java Servlet di localhost tetapi tampaknya macet karena izin soket.
Saya telah membuat proyek baru, menggunakan kode yang sama persis dan bekerja dengan sempurna. Jadi saya tidak mengerti mengapa tidak mau mengerjakan proyek saya.
public class LoginActivity extends AppCompatActivity {
String apiUrl = "http://10.0.2.2:8080/ProyectService/Servlet?action=login";
EditText username;
EditText password;
AlertDialog dialog;
Usuario session;
@Override
public void onCreate(Bundle savedInstanceState) {
// Inicializacion de ventana
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
getSupportActionBar().hide();
// Inicializacion de componentes
username = findViewById(R.id.username);
password = findViewById(R.id.password);
// Inicializacion de funcionalidad de botones
Button button= (Button) findViewById(R.id.login);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
UserLoginTask mAuthTask = new UserLoginTask();
mAuthTask.execute();
}
});
password = findViewById(R.id.password);
createAlertDialog("Usuario o Contraseña Incorrectos");
}
private void createAlertDialog(String message){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(message)
.setTitle("Error");
dialog = builder.create();
}
// ASYNCRONUS NETWORK PROCESS
public class UserLoginTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... params) {
// implement API in background and store the response in current variable
String current = "";
try {
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(apiUrl);
System.out.println(apiUrl);
urlConnection = (HttpURLConnection) url
.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader isw = new InputStreamReader(in);
int data = isw.read();
while (data != -1) {
current += (char) data;
data = isw.read();
//System.out.print(current);
}
System.out.print(current);
// return the data to onPostExecute method
return current;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
} catch (Exception e) {
e.printStackTrace();
return "Exception: " + e.getMessage();
}
return current;
}
}
protected void onPostExecute(String success) {
Log.i(success, "");
//attemptLogin();
}
}
Saya Berharap untuk membaca data tetapi macet di baris ini:
InputStream in = urlConnection.getInputStream();
Ini adalah hasil kesalahan:
java.net.SocketException: socket failed: EPERM (Operation not permitted)
at java.net.Socket.createImpl(Socket.java:492)
at java.net.Socket.getImpl(Socket.java:552)
at java.net.Socket.setSoTimeout(Socket.java:1180)
at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:143)
at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248)
at com.example.controller.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:114)
at com.example.controller.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:93)
at android.os.AsyncTask$3.call(AsyncTask.java:378)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
cukup hapus instalan aplikasi dari emulator lalu jalankan lagi dan itu akan berfungsi. Saya memiliki masalah yang sama
untuk mencopot aplikasi, jalankan proyek Anda ketika pesan "aplikasi telah berhenti" muncul, klik "info aplikasi" lalu batalkan pencabutan
sumber
Pertama-tama Anda perlu mengubah manifes android Anda .xml Tetapi setelah tindakan ini Anda harus menghapus aplikasi dan menjalankannya lagi. https://developer.android.com/training/basics/network-ops/connecting
dan kode di sini:
di AndroidManifest.xml
sumber
Saya harus mencopot pemasangan aplikasi dari emulator dan kemudian semuanya mulai berfungsi. Saya hanya membutuhkan izin berikut di AndroidManifest.xml
sumber
sumber
Ditetapkan
android:usesCleartextTraffic="true"
di file manifes. Tambahkan izinINTERNET
. Copot pemasangan aplikasi lalu pasang lagi.sumber
Jika ada yang masih memiliki masalah ini, saya mengalaminya saat menggunakan VPN dan mencoba menyambung ke wifi saat seluler aktif. Saya menggunakan klien VPN Anyconnect. Solusinya adalah dengan mengaktifkan allow bypass yang memungkinkan Anda mengikat soket ke jaringan tertentu jika ini yang Anda cari.
AnyConnect hanya menggunakan allowBypass jika dikonfigurasi dalam batasan terkelola (oleh EMM), melalui kunci ini: vpn_connection_allow_bypass.
sumber