I am getting an java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getVisibility()' on a null object reference error when I load my app on my android marshmallow phone but it does not on the the avd emulator This question is diferent as the error only seems to occur on android 6.1 or lower.
AlarmReceiver.java
package com.example.ersch.noschoolcalculator;
public class MainActivity extends AppCompatActivity {
private String htmlContentInStringFormat;
private TextView Day1a;
private TextView Day1b;
private TextView Day1c;
private TextView Day2a;
private TextView Day2b;
private TextView Day2c;
private Boolean weather_gov_error;
private TextView ERROR_LOG;
private String first;
public Boolean fatal_error;
private String second;
private String day1a;
private String[] day1b;
private String day1c;
private String day2c;
private String day2a;
private String[] day2b;
private PendingIntent pendingIntent;
private AlarmManager manager;
private String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
private StringBuilder sb = new StringBuilder(14);
private Map<String, String> firstlist = new HashMap<>();
private Map<String, String> secondlist = new HashMap<>();
public static void longInfo(String str) {
if(str.length() > 4000) {
Log.i("Message:", str.substring(0, 4000));
longInfo(str.substring(4000));
} else
Log.i("Message:", str);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//executes jsoup
JsoupAsyncTask jsoupAsyncTask = new JsoupAsyncTask();
jsoupAsyncTask.execute();
//initializes layout
setContentView(R.layout.activity_main);
Day1a = (TextView)findViewById(R.id.Day1a);
Day1b = (TextView)findViewById(R.id.Day1b);
Day1c = (TextView)findViewById(R.id.Day1c);
Day2a = (TextView)findViewById(R.id.Day2a);
Day2b = (TextView)findViewById(R.id.Day2b);
Day2c = (TextView)findViewById(R.id.Day2c);
ERROR_LOG = (TextView)findViewById(R.id.ERROR_LOG);
ERROR_LOG.setVisibility(View.INVISIBLE);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
//button click
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Refreshing", Snackbar.LENGTH_SHORT)
.setAction("Action", null).show();
longInfo("Refreshing");
JsoupAsyncTask jsoupAsyncTask = new JsoupAsyncTask();
jsoupAsyncTask.execute();
}
});
}
@Override
public void onResume(){
super.onResume();
Intent alarmIntent = new Intent(this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
public void startAlarm(View view) {
manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
int interval = 10000;
manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show();
longInfo("Alarm Set");
}
public void cancelAlarm(View view) {
if (manager != null) {
manager.cancel(pendingIntent);
Toast.makeText(this, "Alarm Canceled", Toast.LENGTH_SHORT).show();
longInfo("Alarm Canceled");
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public static boolean isListContainMethod(List<String> arraylist,String value) {
for (String str : arraylist) {
if (!str.toLowerCase().contains(value)) {
return false;
}
}
return true;
}
public class JsoupAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
try {
String loginFormUrl = "https://www.snowdaycalculator.com/Account/login.php";
String loginActionUrl = "https://www.snowdaycalculator.com/prediction.php?zipcode=10562&snowdays=0&extra=0&";
String email = "erschmny@gmail.com";
String passinstr = "email";
String password = "ltlake66";
HashMap<String, String> cookies = new HashMap<>();
HashMap<String, String> formData = new HashMap<>();
Connection.Response loginForm = Jsoup.connect(loginFormUrl).method(Connection.Method.GET).execute();
Document loginDoc = loginForm.parse(); // this is the document that contains response html
cookies.putAll(loginForm.cookies());
formData.put("passInstr", "password");
formData.put("email", email);
formData.put("password", password);
formData.put("back", "");
Connection.Response homePage = Jsoup.connect(loginActionUrl)
.cookies(cookies)
.data(formData)
.method(Connection.Method.POST)
.execute();
htmlContentInStringFormat = homePage.parse().html();
//longInfo(htmlContentInStringFormat);
String[] lines = htmlContentInStringFormat.split("\\r?\\n");
Pattern p = Pattern.compile("(theChance\\[)[0-9]{5,11}] = -?\\d*\\.?\\d+E*\\+*\\d*;");
int x = 0;
for( int i = 0; i < lines.length - 1; i++) {
Matcher m = p.matcher(lines[i]);
if (m.find()) {
if (x == 0) {
first = lines[i];
x += 1;
}
else{
second = lines[i];
}
}
}
longInfo(first);
if (first != null & second != null){
String regex = "[0-9]{8,11}";
Matcher m = Pattern.compile(regex).matcher(first);
if (m.find()) {
firstlist.put("date",Long.toString(Math.round(Double.parseDouble(m.group()))));
}
String regex2 = "-?\\d*\\.?\\d*;";
Matcher m2 = Pattern.compile(regex2).matcher(first);
if (m2.find()) {
firstlist.put("chance",Long.toString(Math.round(Double.parseDouble(m2.group().substring(0, m2.group().length()-1)))));
}
String regex3 = "[0-9]{8,11}";
Matcher m3 = Pattern.compile(regex3).matcher(second);
if (m3.find()) {
secondlist.put("date",Long.toString(Math.round(Double.parseDouble(m3.group()))));
}
String regex4 = "-?\\d*\\.?\\d*;";
Matcher m4 = Pattern.compile(regex4).matcher(second);
if (m4.find()) {
secondlist.put("chance",Long.toString(Math.round(Double.parseDouble(m4.group().substring(0, m2.group().length()-1)))));
}
sb.setLength(0);
day1a = firstlist.get("date");
day1b = day1a.split("(?!^)");
sb.append(day1b[0]).append(day1b[1]).append(day1b[2]).append(day1b[3]);
firstlist.put("year", sb.toString());
sb.setLength(0);
sb.append(day1b[4]).append(day1b[5]);
firstlist.put("month", sb.toString());
sb.setLength(0);
sb.append(day1b[6]).append(day1b[7]);
firstlist.put("day", sb.toString());
longInfo(firstlist.toString());
day2a = secondlist.get("date");
day2b = day2a.split("(?!^)");
sb.setLength(0);
sb.append(day2b[0]).append(day2b[1]).append(day2b[2]).append(day2b[3]);
secondlist.put("year", sb.toString());
sb.setLength(0);
sb.append(day2b[4]).append(day2b[5]);
secondlist.put("month", sb.toString());
sb.setLength(0);
sb.append(day2b[6]).append(day2b[7]);
secondlist.put("day", sb.toString());
longInfo(secondlist.toString());
htmlContentInStringFormat = homePage.parse().html();
lines = htmlContentInStringFormat.split("\\r?\\n");
p = Pattern.compile("(1.5em\">)|(0.85em\")");
x = 0;
for( int i = 0; i < lines.length - 1; i++) {
m = p.matcher(lines[i]);
if (m.find()) {
if (x == 0) {
first = lines[i];
longInfo(first);
x += 1;
}
else{
second = lines[i];
longInfo(second);
}
}
}
regex = ">[A-z0-9, %]{2,1000}";
m = Pattern.compile(regex).matcher(first);
sb.setLength(0);
while (m.find()) {
sb.append(m.group());
}
String temp = sb.toString();
temp = temp.replaceAll(">","");
temp = temp.replaceAll("T","t");
firstlist.put("message",temp);
longInfo(firstlist.get("message"));
regex = ">[A-z0-9, %]{2,1000}";
m = Pattern.compile(regex).matcher(second);
sb.setLength(0);
while (m.find()) {
sb.append(m.group());
}
temp = sb.toString();
temp = temp.replaceAll(">","");
temp = temp.replaceAll("T","t");
secondlist.put("message",temp);
longInfo(secondlist.get("message"));
}
else{
p = Pattern.compile("<b>Fatal error<\\/b>[A-z :()<>/.0-9]*");
x = 0;
for( int i = 0; i < lines.length - 1; i++) {
Matcher m = p.matcher(lines[i]);
if (m.find()) {
if (x == 0) {
fatal_error = Boolean.TRUE;
x += 1;
longInfo(fatal_error.toString());
}
else{
longInfo("Extra fatal error data received");
}
}
}
p = Pattern.compile("\\/\\*\\*\\/\\/\\*Error[\\*={'\"#!;}A-z :()<>/.0-9]*");
//not verified working
x = 0;
for( int i = 0; i < lines.length - 1; i++) {
Matcher m = p.matcher(lines[i]);
if (m.find()) {
if (x == 0) {
weather_gov_error = Boolean.TRUE;
x += 1;
longInfo(weather_gov_error.toString());
}
else{
longInfo("Extra weather.gov error data received");
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
if (first != null & second != null){
Day1a.setText(months[Integer.parseInt(firstlist.get("month")) - 1] + " " + firstlist.get("day") + ", " + firstlist.get("year"));
if (Integer.parseInt(firstlist.get("chance")) <= 0) {
Day1b.setText("Low");
}
else{
Day1b.setText(firstlist.get("chance") + "%");
}
Day1c.setText(firstlist.get("message") + ".");
Day2a.setText(months[Integer.parseInt(secondlist.get("month")) - 1] + " " + secondlist.get("day") + ", " + secondlist.get("year"));
if (Integer.parseInt(secondlist.get("chance")) <= 0) {
Day2b.setText("Low");
}
else{
Day2b.setText(secondlist.get("chance") + "%");
}
Day2c.setText(secondlist.get("message") + ".");
}
else {
Day1a.setText("Error");
Day1b.setText("Error");
Day1c.setText("Error");
Day2a.setText("Error");
Day2b.setText("Error");
Day2c.setText("Error");
if (fatal_error) {
ERROR_LOG.setVisibility(View.VISIBLE);
ERROR_LOG.setText("Website: Fatal Error");
}
else {
ERROR_LOG.setVisibility(View.INVISIBLE);
}
if (weather_gov_error) {
ERROR_LOG.setVisibility(View.VISIBLE);
ERROR_LOG.setText("Website: Weather Error");
}
else {
ERROR_LOG.setVisibility(View.INVISIBLE);
}
}
}
}
}
cell_shape.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape= "rectangle" >
<solid android:color="#ffffff"/>
<stroke android:width="1dp" android:color="#000000"/>
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.ersch.noschoolcalculator.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_popup_sync"
app:backgroundTint="@android:color/holo_green_dark"
app:rippleColor="@android:color/holo_red_dark" />
contnt_main.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center_horizontal"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/content_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.ersch.noschoolcalculator.MainActivity"
tools:showIn="@layout/activity_main">
<TableRow
android:gravity="center_horizontal">
<TextView
android:background="@drawable/cell_shape"
android:layout_column="1"
android:text="Date"
android:gravity="center_horizontal"
android:padding="3dip"
android:paddingStart="10dip"
android:paddingEnd="10dip"
android:textColor="@android:color/black"
android:textSize="18sp" />
<TextView
android:background="@drawable/cell_shape"
android:text="Chance"
android:gravity="center_horizontal"
android:padding="3dip"
android:paddingStart="10dip"
android:paddingEnd="10dip"
android:textColor="@android:color/black"
android:textSize="18sp" />
<TextView
android:background="@drawable/cell_shape"
android:text="Message"
android:gravity="center_horizontal"
android:padding="3dip"
android:paddingStart="10dip"
android:layout_weight="1"
android:paddingEnd="10dip"
android:textColor="@android:color/black"
android:textSize="18sp" />
</TableRow>
<TableRow android:gravity="center_horizontal"
android:layout_height="match_parent"
android:layout_width="match_parent">
<TextView
android:background="@drawable/cell_shape"
android:gravity="center_horizontal"
android:layout_column="1"
android:padding="3dip"
android:paddingStart="10dip"
android:paddingEnd="10dip"
android:id="@+id/Day1a"
android:textSize="18sp"
android:layout_height="match_parent" />
<TextView
android:background="@drawable/cell_shape"
android:gravity="center_horizontal"
android:padding="3dip"
android:paddingStart="10dip"
android:paddingEnd="10dip"
android:id="@+id/Day1b"
android:textSize="18sp"
android:layout_height="match_parent" />
<TextView
android:background="@drawable/cell_shape"
android:gravity="center_horizontal"
android:padding="3dip"
android:paddingStart="10dip"
android:paddingEnd="10dip"
android:id="@+id/Day1c"
android:textSize="12sp"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</TableRow>
<TableRow android:gravity="center_horizontal">
<TextView
android:background="@drawable/cell_shape"
android:layout_column="1"
android:padding="3dip"
android:paddingStart="10dip"
android:paddingEnd="10dip"
android:gravity="center_horizontal"
android:id="@+id/Day2a"
android:textSize="18sp"
android:layout_height="match_parent" />
<TextView
android:background="@drawable/cell_shape"
android:gravity="center_horizontal"
android:padding="3dip"
android:paddingStart="10dip"
android:paddingEnd="10dip"
android:id="@+id/Day2b"
android:textSize="18sp"
android:layout_height="match_parent" />
<TextView
android:background="@drawable/cell_shape"
android:gravity="center_horizontal"
android:padding="3dip"
android:paddingStart="10dip"
android:paddingEnd="10dip"
android:id="@+id/Day2c"
android:textSize="12sp"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</TableRow>
<TextView
android:background="@drawable/cell_shape"
android:gravity="center_horizontal"
android:padding="3dip"
android:paddingStart="10dip"
android:paddingEnd="10dip"
android:id="@+id/ERROR_LOG"
android:textSize="12sp"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Start Alarm"
android:onClick="startAlarm" />
<Button
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Cancel Alarm"
android:onClick="cancelAlarm" />
Android manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ersch.noschoolcalculator">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver android:name=".AlarmReceiver"></receiver>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
error message
--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ersch.noschoolcalculator, PID: 2203
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getVisibility()' on a null object reference
at android.widget.LinearLayout.forceUniformHeight(LinearLayout.java:1380)
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1368)
at android.widget.TableRow.onMeasure(TableRow.java:114)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.TableLayout.measureChildBeforeLayout(TableLayout.java:464)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.TableLayout.measureVertical(TableLayout.java:476)
at android.widget.TableLayout.onMeasure(TableLayout.java:439)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:703)
at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:90)
at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1367)
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:768)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615)
at android.view.View.measure(View.java:17547)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2015)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1173)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1379)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
I/Message:: theChance[20170219] = -1; //PREDICTION
I/Message:: {day=19, date=20170219, month=02, chance=-1, year=2017}
I/Message:: {day=20, date=20170220, month=02, chance=-1, year=2017}
Application terminated.