Text View Null: void android.widget.Textview.setText(java.lang.Charsequence)' on a null Object Reference

Asked

Viewed 2,017 times

1

I’m taking a data from an API on a fragment to change the txt of Activity. But when I call the function that makes this change the setText gives NullPointerException. If I call the same function on the screen activity works, but if I call anywhere from fragment he makes a mistake.

Scanactivity.java

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class ScanActivity extends BaseActivity {

    private TextView txtResultado;
    private TextView txtInfo;
    private TextView txtHorario;
    private TextView txtData;
    private TextView txtUrl;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan);
        setupToolbar();

        txtResultado    = findViewById(R.id.txt_result);
        txtInfo         = findViewById(R.id.txt_info);
        txtHorario      = findViewById(R.id.txt_horario);
        txtData         = findViewById(R.id.txt_data);
        txtUrl         = findViewById(R.id.txt_url);

        setResult("teste 001", "teste URL");


    }

    public void setResult(String result, String fullURL){
        Log.i("RESULTADO", result);
        txtResultado.setText(result);
        txtUrl.setText(fullURL);


    }


}

Leitorfragment.java

import android.app.Fragment;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.google.zxing.Result;
import com.site.qrcode_demo.MySingleton;
import com.site.qrcode_demo.ScanActivity;
import com.site.qrcode_demo.R;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

import me.dm7.barcodescanner.zxing.ZXingScannerView;


public class LeitorFragment extends Fragment implements ZXingScannerView.ResultHandler {

    private static final String FLASH_STATE = "FLASH_STATE";
    private static final String AUTO_FOCUS_STATE = "AUTO_FOCUS_STATE";
    private static final String SELECTED_FORMATS = "SELECTED_FORMATS";
    private static final String CAMERA_ID = "CAMERA_ID";
    private ZXingScannerView mScannerView;
    private boolean mFlash;
    private boolean mAutoFocus;
    private ArrayList<Integer> mSelectedIndices;
    private int mCameraId = -1;

    ScanActivity scanActivity;
    String url = "https://httpbin.org/get";
    private RequestQueue queue;
    private String data;

    Context context;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle state) {
        mScannerView = new ZXingScannerView(getActivity());
        if (state != null) {
            mFlash = state.getBoolean(FLASH_STATE, false);
            mAutoFocus = state.getBoolean(AUTO_FOCUS_STATE, true);
            mSelectedIndices = state.getIntegerArrayList(SELECTED_FORMATS);
            mCameraId = state.getInt(CAMERA_ID, -1);
        } else {
            mFlash = false;
            mAutoFocus = true;
            mSelectedIndices = null;
            mCameraId = -1;
        }
        return mScannerView;
    }


    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        setHasOptionsMenu(true);
        context = getActivity();
    }

    @Override
    public void onResume() {
        super.onResume();
        mScannerView.setResultHandler(this);
        mScannerView.startCamera();

    }

    @Override
    public void handleResult(Result result) {
        conection(result.getText());
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mScannerView.resumeCameraPreview(LeitorFragment.this);
            }
        }, 1000);
    }


    @Override
    public void onPause() {
        super.onPause();
        mScannerView.startCamera();
    }


    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.menu_scan, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle presses on the action bar items
        switch (item.getItemId()) {
            case R.id.menu_flash:
                mFlash = !mFlash;
                if (mFlash) {
                    item.setIcon(R.drawable.ic_flash_on);
                } else {
                    item.setIcon(R.drawable.ic_flash_off);
                }
                mScannerView.setFlash(mFlash);
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }


    public void conection(final String result) {
        //Log.i("RESPOSTA:", resposta);
        final String fullURL = url+"/"+result;
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        try {
                            data = response.getString("url");
                            Log.i("DATA", data);
                            scanActivity = new ScanActivity();
                            scanActivity.setResult(data, fullURL);
                            //resposta = data;
                        } catch (JSONException e) {
                            Log.i("ERRO 1:", "Deu Erro no try");
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        error.printStackTrace();
                        queue.stop();
                    }
                });
        MySingleton.getInstance(context).addRequestque(jsonObjectRequest);

    }


}

activity_scan.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
    tools:context="com.site.qrcode_demo.ScanActivity">

    <fragment android:name="com.site.qrcode_demo.Fragments.LeitorFragment"
        android:id="@+id/scanner_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_gravity="top"
        android:minHeight="?attr/actionBarSize"
        android:background="@color/actionbar_opacity"
        app:theme="@style/TransparentToolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/txt_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top|right"
        android:layout_marginTop="80dp"
        android:text="1250,50"
        android:textAlignment="center"
        android:textSize="30dp"
        android:layout_marginHorizontal="@dimen/margin"
        android:textColor="@android:color/white" />

    <TextView
        android:id="@+id/txt_info"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top|right"
        android:layout_marginRight="16dp"
        android:layout_marginTop="120dp"
        android:text="Informações adicionais"
        android:textAlignment="center"
        android:layout_marginHorizontal="@dimen/margin"
        android:textColor="@android:color/white" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center|bottom"
        android:layout_marginBottom="100dp"
        android:gravity="center"
        android:layout_marginHorizontal="@dimen/margin">
    <TextView
        android:id="@+id/txt_sensor"
        android:text="Sensor x366"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:textColor="#ffffff"
        android:layout_height="wrap_content"
        android:textAlignment="center"
        android:textSize="25dp"/>
        <LinearLayout
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center">
            <TextView
                android:id="@+id/txt_horario"
                android:text="09:04"
                android:layout_width="wrap_content"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:textColor="#ffffff"
                android:textAlignment="center"
                android:textSize="35dp"/>
            <TextView
                android:id="@+id/txt_data"
                android:text="06/04/2018"
                android:layout_width="wrap_content"
                android:layout_weight="1"
                android:layout_height="0dp"
                android:textColor="#ffffff"
                android:textAlignment="center"
                android:textSize="20dp"/>
        </LinearLayout>

    </LinearLayout>

    <TextView
        android:id="@+id/txt_url"
        android:layout_gravity="center|bottom"
        android:text="htto://URL.com/teste"
        android:layout_width="wrap_content"
        android:textColor="#ffffff"
        android:layout_height="wrap_content"
        android:layout_marginBottom="50dp"/>

    <TextView
        android:layout_gravity="center|bottom"
        android:text="Place a barcode in the viewfinder rectangle to scan it."
        android:layout_width="wrap_content"
        android:textColor="#ffffff"
        android:layout_height="wrap_content"/>

</FrameLayout>

PS: Before it was working this way. I don’t know what was the change I made to happen this problem

2 answers

1

Bro you did not say if Textview is in Activity or in the Textview view, anyway the error is in the edittext statement, when you declare so: txtResultado= findViewById(R.id.txt_result); it subunderstands that edittext belongs to the current Activity, so if it is in the Fragment view you declare it No Fragment informing that it belongs to view, thus: txtResultado = mScannerView.findViewById(R.id.txt_result);, if you do not have Voce declares informing Activity, thus: txtResultado = getActivity().findViewById(R.id.txt_result);. Got it? you need to inform where is the edittext to be identified.

  • I managed to solve by putting the code on onResume. Pq when I put it on onCreate gave it as null: onCreate(){ ... txtResult = getActivity(). findViewById(R.id.txt_result); }

0

Resolution:

Leitorfragment.java

    @Override
public void onResume() {
    super.onResume();
    mScannerView.setResultHandler(this);
    mScannerView.startCamera();

    txtResult   = getActivity().findViewById(R.id.txt_result);
    txtInfo     = getActivity().findViewById(R.id.txt_info);
    txtSensor   = getActivity().findViewById(R.id.txt_sensor);
    txtHorario  = getActivity().findViewById(R.id.txt_horario);
    txtData     = getActivity().findViewById(R.id.txt_data);
    txtUrl  = getActivity().findViewById(R.id.txt_url);

}

If I put the code in onCreate it gave null object. Then the solution was to capture Textview by onResume

Browser other questions tagged

You are not signed in. Login or sign up in order to post.