Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid app crashing on receiving intent bundle?
    primarykey
    data
    text
    <p>I will preface this by saying I am a complete newb, this is my first project, and I have tried searching everywhere to answer my question.</p> <p>I have a login screen set up on android. Once the user hits the login button and the login name/password are correct, (validated in PHP/SQL) it sends an intent/bundle to the next activity.</p> <p>Here is the code to send the intent/bundle:</p> <pre><code>Intent intent = new Intent(this, Homepage.class); EditText uname2 = (EditText)findViewById(R.id.txt_username); String username2 = uname2.getText().toString(); Intent intent2 = new Intent(this, Homepage.class); intent2.putExtra("username2", username2); startActivity(intent); </code></pre> <p>Here is the code to receive the intent bundle on the next activity:</p> <pre><code> Intent intent2 = getIntent(); String usernamefromlogin = intent2.getExtras().getString("username2"); String url5 = url.concat(usernamefromlogin); TextView text = (TextView) findViewById(R.id.errorchecking); text.setText(url5); </code></pre> <p>I am using concat() to put a URL before the intent bundle because that URL is going to be used as a _GET command to a PHP file (but I digress). Currently, I have it set to place the text into a TextView so that I can see what the end result is, but the app crashes before I can get to that point.</p> <p>My app crashes when I hit the login button. Here is the Logcat I am getting:</p> <pre><code>11-30 20:06:39.449: E/AndroidRuntime(4578): FATAL EXCEPTION: main 11-30 20:06:39.449: E/AndroidRuntime(4578): Process: com.sencide, PID: 4578 11-30 20:06:39.449: E/AndroidRuntime(4578): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sencide/com.sencide.Homepage}: java.lang.NullPointerException 11-30 20:06:39.449: E/AndroidRuntime(4578): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176) 11-30 20:06:39.449: E/AndroidRuntime(4578): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226) 11-30 20:06:39.449: E/AndroidRuntime(4578): at android.app.ActivityThread.access$700(ActivityThread.java:135) 11-30 20:06:39.449: E/AndroidRuntime(4578): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397) 11-30 20:06:39.449: E/AndroidRuntime(4578): at android.os.Handler.dispatchMessage(Handler.java:102) 11-30 20:06:39.449: E/AndroidRuntime(4578): at android.os.Looper.loop(Looper.java:137) 11-30 20:06:39.449: E/AndroidRuntime(4578): at android.app.ActivityThread.main(ActivityThread.java:4998) 11-30 20:06:39.449: E/AndroidRuntime(4578): at java.lang.reflect.Method.invokeNative(Native Method) 11-30 20:06:39.449: E/AndroidRuntime(4578): at java.lang.reflect.Method.invoke(Method.java:515) 11-30 20:06:39.449: E/AndroidRuntime(4578): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 11-30 20:06:39.449: E/AndroidRuntime(4578): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 11-30 20:06:39.449: E/AndroidRuntime(4578): at dalvik.system.NativeStart.main(Native Method) 11-30 20:06:39.449: E/AndroidRuntime(4578): Caused by: java.lang.NullPointerException 11-30 20:06:39.449: E/AndroidRuntime(4578): at com.sencide.Homepage.onCreate(Homepage.java:46) 11-30 20:06:39.449: E/AndroidRuntime(4578): at android.app.Activity.performCreate(Activity.java:5243) 11-30 20:06:39.449: E/AndroidRuntime(4578): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 11-30 20:06:39.449: E/AndroidRuntime(4578): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140) 11-30 20:06:39.449: E/AndroidRuntime(4578): ... 11 more 11-30 20:06:42.569: I/Process(4578): Sending signal. PID: 4578 SIG: 9 </code></pre> <p>Here is my entire code:</p> <p>AndroidLogin.java</p> <pre><code>public class AndroidLogin extends Activity implements OnClickListener { Button ok,back,exit; TextView result; String thisisausername; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Login button clicked ok = (Button)findViewById(R.id.btn_login); ok.setOnClickListener(this); result = (TextView)findViewById(R.id.tbl_result); } public void postLoginData() { // Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); // login.php returns true if username and password match in db HttpPost httppost = new HttpPost("http://10.0.2.2/login.php"); try { // Add user name and password EditText uname = (EditText)findViewById(R.id.txt_username); String username = uname.getText().toString(); EditText pword = (EditText)findViewById(R.id.txt_password); String password = pword.getText().toString(); List&lt;NameValuePair&gt; nameValuePairs = new ArrayList&lt;NameValuePair&gt;(2); nameValuePairs.add(new BasicNameValuePair("username", username)); nameValuePairs.add(new BasicNameValuePair("password", password)); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); // Execute HTTP Post Request Log.w("SENCIDE", "Execute HTTP Post Request"); HttpResponse response = httpclient.execute(httppost); String str = inputStreamToString(response.getEntity().getContent()).toString(); Log.w("SENCIDE", str); if(str.toString().equalsIgnoreCase("true")) { Log.w("SENCIDE", "TRUE"); result.setText("Login Successful! Please Wait..."); }else { Log.w("SENCIDE", "FALSE"); result.setText(str); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private StringBuilder inputStreamToString(InputStream is) { String line = ""; StringBuilder total = new StringBuilder(); // Wrap a BufferedReader around the InputStream BufferedReader rd = new BufferedReader(new InputStreamReader(is)); // Read response until the end try { while ((line = rd.readLine()) != null) { total.append(line); } } catch (IOException e) { e.printStackTrace(); } // Return full string return total; } public void RegisterButton(View view) { String url = "http://10.0.2.2/register.php"; Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); } @Override public void onClick(View view) { postLoginData(); // turns the text in the textview "Tbl_result" into a text string called "tblresult" TextView tblresult = (TextView) findViewById(R.id.tbl_result); // If "tblresult" text string matches the string "Login Successful! Please Wait..." exactly, it will switch to next activity if (tblresult.getText().toString().equals("Login Successful! Please Wait...")) { Intent intent = new Intent(this, Homepage.class); EditText uname2 = (EditText)findViewById(R.id.txt_username); String username2 = uname2.getText().toString(); intent.putExtra("username2", username2); startActivity(intent); } } } </code></pre> <p>Homepage.Java</p> <pre><code>public class Homepage extends Activity { //URL to get JSON Arrays public static String url = "http://x.x.x.x/SQL.php?username=123"; //JSON Node Names private static final String TAG_USER = "users"; private static final String TAG_ID = "uid"; private static final String TAG_NAME = "fullname"; private static final String TAG_DISPLAY = "displayname"; private static final String TAG_EMAIL = "email"; private static final String TAG_PW = "password"; private static final String TAG_CREATED = "created_at"; private static final String TAG_UPDATED = "updated_at"; JSONArray user = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Get login name from EditText in login screen and concatenate it to PHP user-name for _GET Intent intent2 = getIntent(); String usernamefromlogin = intent2.getExtras().getString("username2"); String url5 = url.concat(usernamefromlogin); TextView text = (TextView) findViewById(R.id.errorchecking); text.setText(url5); setContentView(R.layout.reshomepage); // Creating new JSON Parser JSONParser jParser = new JSONParser(); // Getting JSON from URL JSONObject json = jParser.getJSONFromUrl(url); try { // Getting JSON Array user = json.getJSONArray(TAG_USER); JSONObject c = user.getJSONObject(0); // Storing JSON item in a Variable String uid = c.getString(TAG_ID); String name = c.getString(TAG_NAME); String display = c.getString(TAG_DISPLAY); String email = c.getString(TAG_EMAIL); String pw = c.getString(TAG_PW); String created = c.getString(TAG_CREATED); String updated = c.getString(TAG_UPDATED); //Importing TextView final TextView uid1 = (TextView)findViewById(R.id.tvuid); final TextView name1 = (TextView)findViewById(R.id.tvfullname); final TextView display1 = (TextView)findViewById(R.id.tvdisplayname); final TextView email1 = (TextView)findViewById(R.id.tvemail); final TextView pw1 = (TextView)findViewById(R.id.tvpassword); final TextView created1 = (TextView)findViewById(R.id.tvcreated_at); final TextView updated1 = (TextView)findViewById(R.id.tvupdated_at); //Set JSON Data in TextView uid1.setText(uid); name1.setText(name); display1.setText(display); email1.setText(email); pw1.setText(pw); created1.setText(created); updated1.setText(updated); } catch (JSONException e) { e.printStackTrace(); } } } </code></pre> <p>JSONParser.java</p> <pre><code>public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String json = ""; // constructor public JSONParser() { } public JSONObject getJSONFromUrl(String url) { // Making HTTP request try { // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); 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(); } 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>Main.XML (first login screen)</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" &gt; &lt;!-- Text at Top !--&gt; &lt;TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/lbl_top" android:textSize="16sp" android:typeface="sans" android:text="Please Login" /&gt; &lt;!-- Username Text Above Field !--&gt; &lt;TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/lbl_username" android:text="User Name (e-mail)" /&gt; &lt;!-- Username Field !--&gt; &lt;EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18sp" android:id="@+id/txt_username" /&gt; &lt;!-- Password Text Above Field !--&gt; &lt;TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/lbl_password" android:text="Password" /&gt; &lt;!-- Password Field !--&gt; &lt;EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:password="true" android:id="@+id/txt_password" /&gt; &lt;!-- Login Button !--&gt; &lt;Button android:layout_width="match_parent" android:layout_height="35dp" android:id="@+id/btn_login" android:text="Login" android:onClick="LoginScreenButton" /&gt; &lt;!-- Register Button !--&gt; &lt;Button android:layout_width="match_parent" android:layout_height="35dp" android:id="@+id/register" android:text="New Registration" android:onClick="RegisterButton" /&gt; &lt;TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tbl_result" android:textColor="#00FF00" /&gt; &lt;TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tbl_result2" android:textColor="#00FF00" /&gt; &lt;/LinearLayout&gt; </code></pre> <p>reshomepage.XML (second screen where I am trying to send intent to)</p> <pre><code>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" &gt; &lt;TextView android:id="@+id/tvuid" android:layout_width="wrap_content" android:layout_height="wrap_content" /&gt; &lt;TextView android:id="@+id/tvfullname" android:layout_width="match_parent" android:layout_height="wrap_content" /&gt; &lt;TextView android:id="@+id/tvdisplayname" android:layout_width="wrap_content" android:layout_height="wrap_content" /&gt; &lt;TextView android:id="@+id/tvemail" android:layout_width="wrap_content" android:layout_height="wrap_content" /&gt; &lt;TextView android:id="@+id/tvpassword" android:layout_width="wrap_content" android:layout_height="wrap_content" /&gt; &lt;TextView android:id="@+id/tvcreated_at" android:layout_width="wrap_content" android:layout_height="wrap_content" /&gt; &lt;TextView android:id="@+id/tvupdated_at" android:layout_width="wrap_content" android:layout_height="wrap_content" /&gt; &lt;TextView android:id="@+id/errorchecking" android:layout_width="wrap_content" android:layout_height="wrap_content" /&gt; &lt;/LinearLayout&gt; </code></pre>
    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.
    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