Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid HTTP Request Crashes App before even making a request
    primarykey
    data
    text
    <blockquote> <p><strong>Possible Duplicate:</strong><br> <a href="https://stackoverflow.com/questions/11736530/android-httpclient-networkonmainthreadexception">Android HttpClient : NetworkOnMainThreadException</a> </p> </blockquote> <p>I am working on an application that is making requests, and the app works fine, up until I have to make a request to the server. I am using the same code as it was written before for the same app, but this has been revised.</p> <p>Fragment Class That Handles Click:</p> <pre><code>import org.json.JSONException; import org.json.JSONObject; import org.myapp.app.utils.API; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class FragmentStudentLogin extends Fragment implements OnClickListener { EditText uN, pW; Button signin; private API api; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_login, container, false); signin = (Button)v.findViewById(R.id.s_sign_in); signin.setOnClickListener(this); uN = (EditText)v.findViewById(R.id.f_t_s_username); pW = (EditText)v.findViewById(R.id.f_t_s_password); api = new API(); return v; } public void onClick(View v){ switch(v.getId()) { case R.id.s_sign_in: String user = uN.getText().toString(); String pass = pW.getText().toString(); if(user.length()==0){ PopIt("Please enter your username."); } else if(pass.length()==0){ PopIt("Please enter your password."); } else { try { JSONObject json; json = api.login(user, pass); if(json == null || json.isNull("status")){ PopIt(getString(R.string.error_network)); } else { PopIt(json.getString("msg")); } } catch (JSONException e){ } } break; } } public void PopIt(String msg){ Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT).show(); } } </code></pre> <p>Class that Click makes a call to:</p> <pre><code>import java.util.ArrayList; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONObject; import org.myapp.app.utils.JSONParser; public class API { private JSONParser jsonParser; private static String serverURL = "http://mydomain.com/api/device/login"; public API(){ jsonParser = new JSONParser(); } public JSONObject login(String uN, String pW) { List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;(); params.add(new BasicNameValuePair("username", uN)); params.add(new BasicNameValuePair("password", pW)); JSONObject json = jsonParser.getJSONFromUrl(serverURL, params); return json; } </code></pre> <p>Class that Processes Requests:</p> <pre><code>import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONException; import org.json.JSONObject; import android.util.Log; public class JSONParser { InputStream is = null; JSONObject jObj = null; String json = ""; // constructor public JSONParser() { } public JSONObject getJSONFromUrl(String url, List&lt;NameValuePair&gt; params) { // Making HTTP request try { // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(params)); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); json = sb.toString(); Log.e("JSON", json); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toString()); } // try parse the string to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String return jObj; } } </code></pre> <p>LogCat</p> <pre><code>10-02 19:40:23.734: E/AndroidRuntime(4401): FATAL EXCEPTION: main 10-02 19:40:23.734: E/AndroidRuntime(4401): android.os.NetworkOnMainThreadException 10-02 19:40:23.734: E/AndroidRuntime(4401): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 10-02 19:40:23.734: E/AndroidRuntime(4401): at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 10-02 19:40:23.734: E/AndroidRuntime(4401): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 10-02 19:40:23.734: E/AndroidRuntime(4401): at java.net.InetAddress.getAllByName(InetAddress.java:220) 10-02 19:40:23.734: E/AndroidRuntime(4401): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 10-02 19:40:23.734: E/AndroidRuntime(4401): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 10-02 19:40:23.734: E/AndroidRuntime(4401): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 10-02 19:40:23.734: E/AndroidRuntime(4401): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 10-02 19:40:23.734: E/AndroidRuntime(4401): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 10-02 19:40:23.734: E/AndroidRuntime(4401): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 10-02 19:40:23.734: E/AndroidRuntime(4401): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 10-02 19:40:23.734: E/AndroidRuntime(4401): at org.myapp.app.utils.JSONParser.getJSONFromUrl(JSONParser.java:42) 10-02 19:40:23.734: E/AndroidRuntime(4401): at org.myapp.app.utils.API.studentLogin(API.java:26) 10-02 19:40:23.734: E/AndroidRuntime(4401): at org.myapp.app.FragmentStudentLogin.onClick(FragmentStudentLogin.java:52) 10-02 19:40:23.734: E/AndroidRuntime(4401): at android.view.View.performClick(View.java:3511) 10-02 19:40:23.734: E/AndroidRuntime(4401): at android.view.View$PerformClick.run(View.java:14109) 10-02 19:40:23.734: E/AndroidRuntime(4401): at android.os.Handler.handleCallback(Handler.java:605) 10-02 19:40:23.734: E/AndroidRuntime(4401): at android.os.Handler.dispatchMessage(Handler.java:92) 10-02 19:40:23.734: E/AndroidRuntime(4401): at android.os.Looper.loop(Looper.java:137) 10-02 19:40:23.734: E/AndroidRuntime(4401): at android.app.ActivityThread.main(ActivityThread.java:4424) 10-02 19:40:23.734: E/AndroidRuntime(4401): at java.lang.reflect.Method.invokeNative(Native Method) 10-02 19:40:23.734: E/AndroidRuntime(4401): at java.lang.reflect.Method.invoke(Method.java:511) 10-02 19:40:23.734: E/AndroidRuntime(4401): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 10-02 19:40:23.734: E/AndroidRuntime(4401): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 10-02 19:40:23.734: E/AndroidRuntime(4401): at dalvik.system.NativeStart.main(Native Method) </code></pre> <p>Like I said, This code worked before, "Class that Click makes a call to:", and "Class that Processes Requests:" sections, I have used before with no problems. Android API 16 is being used on a 7" Tablet. Would greatly appreciate any help.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload