So I have 2 java classes, the main one being intents.java and the second one being BrowserView.java
I´ve declared both on the android manifest and added the permissions as well.
The main XML file is called main_linearlayout
Can anyone spot the error?
Thank you!
Also - the search button seems to be doing nothing when clicked, not quite sure why?
intents.java:
package com.course.example;
import android.app.Activity;
import android.content.Intent;
import android.content.ComponentName;
import android.os.Bundle;
import android.net.Uri;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class intents extends Activity implements OnClickListener {
private EditText checkAmount, numOfPeople;
private double tip = 0.15;
private TextView viewBill, viewPerson, viewTip;
double totalB, totalP, totalTP, totalT;
// just in case:
//set a request code number to identify a particular request
public static final int requestCode_235 = 235;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(android.R.style.Theme_Dialog);
setContentView(R.layout.main_linearlayout);
// Set up click listeners for all the buttons
// Button continueButton = (Button)findViewById(R.id.first_button);
//continueButton.setOnClickListener(this);
Button goButton = (Button)findViewById(R.id.btnGo);
goButton.setOnClickListener(this);
Button searchButton = (Button)findViewById(R.id.btnSearch);
searchButton.setOnClickListener(this);
Button mapButton = (Button)findViewById(R.id.btnMap);
mapButton.setOnClickListener(this);
Button dialButton = (Button)findViewById(R.id.btnDial);
dialButton.setOnClickListener(this);
}
//avoids runtime check for permission to CALL_PHONE
public void onClick(View v) {
switch (v.getId()) {
// 1) get the calculations
case R.id.btnGo:
// get info from text box called checkAmount:
checkAmount = (EditText) findViewById(R.id.checkAmount);
String checkString = checkAmount.getText().toString();
double checkAmountD = Double.parseDouble(checkString);
double checkAmountR = Math.round(checkAmountD * 100.0) / 100.0;
// get info from number of people
numOfPeople = (EditText) findViewById(R.id.numOfPeople);
String numPeopleS = numOfPeople.getText().toString();
double numPeopleD = Double.parseDouble(numPeopleS);
// calculate total tip, total bill, total per person, and total tip per person
totalT = checkAmountR * tip;
totalB = checkAmountR + totalT;
totalP = totalB / numPeopleD;
totalTP = totalT / numPeopleD;
setNewText(); // print out calculations on app! :)
break;
//2) implicit intent, open dialer and make call
case R.id.btnSearch:
Intent i1 = new Intent(this, BrowserView.class);
startActivityForResult(i1, requestCode_235);
//startActivity(i1);
break;
//3) implicit intent, call GoogleMaps
case R.id.btnMap:
Uri uri2 = Uri.parse("geo:42.3889167,-71.2208033?z=18");
Intent i2 = new Intent(Intent.ACTION_VIEW,uri2);
if (i2.resolveActivity(getPackageManager()) != null) {
startActivity(i2);
}
break;
//4) implicit intent, open dialer and make call
case R.id.btnDial:
Uri uri3 = Uri.parse("tel:7818912000");
Intent i3 = new Intent(Intent.ACTION_CALL,uri3);
startActivity(i3);
break;
}
}
public void setNewText(){
// print these 4 out on the edit texts
TextView viewBill = (TextView) findViewById(R.id.totalBill);
double totalBRounded = Math.round(totalB * 100.0) / 100.0;
String totalBillS = String.valueOf(totalBRounded); // before rounding this was valueof(totalB)
viewBill.setText("$" + totalBillS);
TextView viewPerson = (TextView) findViewById(R.id.totalPerPerson);
double totalPRounded = Math.round(totalP * 100.0) / 100.0;
String totalPerPS = String.valueOf(totalPRounded);
viewPerson.setText("$" + totalPerPS);
TextView viewTip = (TextView) findViewById(R.id.totalTip);
double totalTipRounded = Math.round(totalT * 100.0) / 100.0;
String totalTipS = String.valueOf(totalTipRounded);
viewTip.setText("$" + totalTipS);
TextView viewTipPerPerson = (TextView) findViewById(R.id.tipPerPerson);
double totalTipPerPRounded = Math.round(totalTP * 100.0) / 100.0;
String tipPerPersonS = String.valueOf(totalTipPerPRounded);
viewTipPerPerson.setText("$" + tipPerPersonS);
}
//listen for event of requested activity finishing
@Override
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case (requestCode_235): {
if (resultCode == Activity.RESULT_OK)
Toast.makeText(this, "WebLookup finished", Toast.LENGTH_LONG).show();
else
Toast.makeText(this, "WebLookup is NOT working", Toast.LENGTH_LONG).show();
break;
}
default : Toast.makeText(this, "", Toast.LENGTH_LONG).show();
}//switch
}// onActivityResult
}
browser view. java:
package com.course.example;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
public class BrowserView extends Activity {
private EditText urlText;
private Button searchButton;
private WebView webView;
@Override
public void onCreate(Bundle savedInstanceState) {
// ...
super.onCreate(savedInstanceState);
setContentView(R.layout.screen2);
// Get a handle to all user interface elements
urlText = (EditText) findViewById(R.id.url_field);
searchButton = (Button) findViewById(R.id.btnSearch);
webView = (WebView) findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
//intercept URL loading and load in widget
webView.setWebViewClient(new WebViewClient(){
@SuppressWarnings("deprecation")
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);
return true;
}
});
// Set button to open browser
searchButton.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
webView.loadUrl(urlText.getText().toString());
}
});
//set listener on EditText
urlText.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View view, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
webView.loadUrl(urlText.getText().toString());
return true;
}
return false;
}
});
}
//the back key navigates back to the previous web page - we were looking at this
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
first couple of lines of logcat:
21-02-27 08:10:35.387 2853-2853/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.course.example, PID: 2853
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.course.example/com.course.example.intents}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at com.course.example.intents.onCreate(intents.java:49)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2021-02-27 08:11:23.928 5064-5064/com.course.example E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.course.example, PID: 5064
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.course.example/com.course.example.intents}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at com.course.example.intents.onCreate(intents.java:49)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2021-02-27 08:11:27.268 5101-5101/com.course.example E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.course.example, PID: 5101
Edit: here are the 2 XML files:
main linear layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myLinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ACA6AA"
android:orientation="vertical"
android:padding="4dp" >
<TextView
android:id="@+id/labelUserName"
android:layout_width="300dp"
android:layout_height="80dp"
android:layout_marginLeft="50dp"
android:layout_marginTop="20dp"
android:background="#F688B4"
android:fontFamily="@font/alfa_slab_one"
android:gravity="center"
android:text="Tip Calculator"
android:textColor="#CCCECE"
android:textSize="25sp"
android:textStyle="bold"></TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="25dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_marginLeft="5dp"
android:layout_weight="2"
android:background="#F688B4"
android:fontFamily="serif-monospace"
android:gravity="center"
android:text="Check Amount"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold" />
<EditText
android:id="@+id/checkAmount"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:textSize="18sp" >
</EditText>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_marginLeft="5dp"
android:layout_weight="2"
android:background="#F688B4"
android:fontFamily="serif-monospace"
android:gravity="center"
android:text="Number of People"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold" />
<EditText
android:id="@+id/numOfPeople"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:textSize="18sp" >
</EditText>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_marginLeft="5dp"
android:layout_weight="2"
android:background="#F688B4"
android:fontFamily="serif-monospace"
android:gravity="center"
android:text="Tip Percentage%"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold" />
<EditText
android:id="@+id/tipPercent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:textSize="18sp" >
</EditText>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<Button
android:id="@+id/btnGo"
style="@style/demoStyle"
android:text="Tip"></Button>
<Button
android:id="@+id/btnWeb"
style="@style/demoStyle"
android:text="WEB"></Button>
<Button
android:id="@+id/btnDial"
style="@style/demoStyle"
android:text="DIAL"></Button>
<Button
android:id="@+id/btnMap"
style="@style/demoStyle"
android:text="MAP"></Button>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_marginLeft="2dp"
android:layout_weight="2"
android:background="#F688B4"
android:fontFamily="@font/abhaya_libre"
android:gravity="center"
android:text="Total Bill"
android:textColor="@color/black"
android:textSize="16sp" />
<TextView
android:id="@+id/totalBill"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_marginLeft="2dp"
android:layout_weight="2"
android:fontFamily="@font/abhaya_libre"
android:gravity="center"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="2"
android:background="#F688B4"
android:fontFamily="@font/abhaya_libre"
android:gravity="center"
android:text="Total per Person"
android:textColor="@color/black"
android:textSize="16sp" />
<TextView
android:id="@+id/totalPerPerson"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="2"
android:fontFamily="@font/abhaya_libre"
android:gravity="center"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_marginLeft="2dp"
android:layout_weight="2"
android:background="#F688B4"
android:fontFamily="@font/abhaya_libre"
android:gravity="center"
android:text="Total Tip"
android:textColor="@color/black"
android:textSize="16sp" />
<TextView
android:id="@+id/totalTip"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_marginLeft="2dp"
android:layout_weight="2"
android:fontFamily="@font/abhaya_libre"
android:gravity="center"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="2"
android:background="#F688B4"
android:fontFamily="@font/abhaya_libre"
android:gravity="center"
android:text="Tip per Person"
android:textColor="@color/black"
android:textSize="16sp" />
<TextView
android:id="@+id/tipPerPerson"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="2"
android:fontFamily="@font/abhaya_libre"
android:gravity="center"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
screen 2:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/url_field"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4" />
<Button
android:id="@+id/btnSearch"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="search" />
</LinearLayout>
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:background="#ACA6AA"
android:layout_height="match_parent" />
</LinearLayout>