recently I have started to develop my first Android app. I have to build a login web service, but my app keeps crashing when HttpRespone is executing. Could Android API 23 be causing this? I read they have dropped support for Apache in this API.
LoginWS.java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
class LoginWS {
public String userId ;
public boolean valid = false ;
public String token ;
public String unitId ;
public String expire;
public void getLoginAuth(String user, String password) {
try {
DefaultHttpClient client = new DefaultHttpClient();
HttpPut putRequest = new HttpPut("https://documenta-dms.com/DMSWS/api/v1/login/");
StringEntity input = new StringEntity("<user>\n"
+ "<username>" + user + "</username>\n"
+ "<password>" + password + "</password>\n"
+ "</user>");
input.setContentType("application/xml");
putRequest.setEntity(input);
HttpResponse response = client.execute(putRequest);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line = null;
while ((line = rd.readLine()) != null) {
System.out.println(line);
if(!line.contains("<html>")){
parseXML(line);
}else{
valid=false;
}
}
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(LoginWS.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(LoginWS.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void parseXML(String line) {
try {
org.w3c.dom.Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(line)));
NodeList response = doc.getElementsByTagName("userToken");
if (response.getLength() > 0) {
Element err = (Element) response.item(0);
expire=err.getElementsByTagName("expires").item(0).getTextContent();
token=err.getElementsByTagName("token").item(0).getTextContent();
unitId=err.getElementsByTagName("unitId").item(0).getTextContent();
userId=err.getElementsByTagName("userId").item(0).getTextContent();
valid=Boolean.valueOf(err.getElementsByTagName("valid").item(0).getTextContent());
}else{
valid=false;
}
} catch (ParserConfigurationException ex) {
Logger.getLogger(LoginWS.class.getName()).log(Level.SEVERE, null, ex);
} catch (SAXException ex) {
Logger.getLogger(LoginWS.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(LoginWS.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String[] args) {
//new LoginWS().getLoginAuth("blank", "blank");
}
}
Login.java:
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
public class Login extends AppCompatActivity {
LoginWS login = new LoginWS();
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
}
private boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null;
}
public void onButtonClick(View v){
if(v.getId() == R.id.login){
if(!isNetworkConnected()){
new android.support.v7.app.AlertDialog.Builder(this)
.setMessage("No internet connection has been found!")
.setCancelable(false)
.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent i = new Intent(Settings.ACTION_SETTINGS);
startActivity(i);
}
})
.setNegativeButton("Cancel", null)
.show();
} else {
EditText email = (EditText) findViewById(R.id.email);
String e_mail = email.getText().toString();
EditText password = (EditText) findViewById(R.id.password);
String pword = password.getText().toString();
login.getLoginAuth(e_mail, pword);
if (e_mail.equals("blank") && pword.equals("blank")) {
Intent i = new Intent(this, MeniuPrincipal.class);
startActivity(i);
finish();
} else {
new AlertDialog.Builder(this)
.setMessage("Incorrect Username or Password!")
.show();
}
}
}
}
public void onBackPressed() {
new AlertDialog.Builder(this)
.setMessage("Are you sure you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
})
.setNegativeButton("No", null)
.show();
}
}
Errors:
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: FATAL EXCEPTION: main
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: Process: ro.infrasoft.documenta, PID: 18630
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: java.lang.IllegalStateException: Could not execute method for android:onClick
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.support.v7.internal.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:278)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.view.View.performClick(View.java:5198)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:21147)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: Caused by: java.lang.reflect.InvocationTargetException
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.support.v7.internal.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:273)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.view.View.performClick(View.java:5198)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:21147)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: Caused by: android.os.NetworkOnMainThreadException
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at java.net.InetAddress.getAllByName(InetAddress.java:215)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:142)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:366)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at ro.infrasoft.documenta.LoginWS.getLoginAuth(LoginWS.java:39)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at ro.infrasoft.documenta.Login.onButtonClick(Login.java:47)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.support.v7.internal.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:273)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.view.View.performClick(View.java:5198)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:21147)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-03 16:41:31.142 18630-18630/ro.infrasoft.documenta E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Thanks in advance!