Ошибка Android-студии при записи значения из асинхронного метода в текстовое поле - PullRequest
0 голосов
/ 24 июня 2018

В настоящее время я работаю над тем, чтобы разработать программу для Android, которая должна считывать данные json с сервера. Я использую средний уровень PHP для этого. И я могу получать данные с сервера без проблем. Однако, когда мне нужно использовать данные, мне нужно подключить свой класс Java, который получает от сервера (PHPconn.java), к моей деятельности (ProductInfo.java), я получаю ошибку.

Поскольку код получателя работает как асинхронный, я создал в своей деятельности функцию, которая выводит эти данные на экран. И я вызываю эту функцию в конце функции postexecution ().

Я получаю следующую ошибку.

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference

на линии:

setContentView (R.layout.activity_product_info);

PHPcomm.java:

/*
PAUSE FOR PRAYER

Dear God,
Please help me find any malicious bugs that I've created
and ,yet, I can't spot.
Make my code free of errors.


END PRAYER
*/

package gq.yigit.foodcloud;

import android.content.Intent;
import android.nfc.Tag;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Button;

import com.google.api.client.json.JsonObjectParser;
import com.google.firebase.database.*;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import android.view.View.OnClickListener;
import android.widget.Toast;

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

public class ProductInfo extends AppCompatActivity implements OnClickListener {
    private static final String TAG = "MainActivity";
    private TextView Name;
    private TextView Cal;
    private TextView Cooked;
    private TextView Nutrients;
    private TextView BBD;
    private TextView Processed;
    private TextView Problematic;
    private TextView Allergens;
    private String name;
    private String  cal;
    private String cooked;
    private String nutrients;
    private ArrayList nutrients_array;
    private String bbd;
    private String processed;
    private String expiry_date;
    private String allergens;
    private ArrayList allergens_array;
    public String json_str;
    public JSONObject Prod;
    private Button scanBtn;
    private Button jrnyBtn;
    public String prod_loc;
    public String allergens_print = new String();
    public String nutrients_print = new String();



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


    }

    @Override
    public void onClick(View v){
        if (v.getId() == R.id.button) {
            Intent i = new Intent(ProductInfo.this, MainActivity.class);
            startActivity(i);
        }if (v.getId() == R.id.journey) {
            Intent i = new Intent(ProductInfo.this, LearnMore.class);
            i.putExtra("key", prod_loc);
            startActivity(i);
        }
    }

    public void onStart(){
        super.onStart();
        setContentView(R.layout.activity_product_info);
        scanBtn = (Button)findViewById(R.id.button);
        scanBtn.setOnClickListener(this);
        jrnyBtn = (Button)findViewById(R.id.journey);
        jrnyBtn.setOnClickListener(this);


                Bundle extras = getIntent().getExtras();
                if (extras != null) {
                    prod_loc = extras.getString("key");
                }

                PHPComm comm = new PHPComm(this);
                comm.execute("get", "1", "Products");

            }

            public void continueApp(String json_str){
                try {
                    Log.d(TAG,"This is a pointer");
                    Log.d(TAG,"Got json str " + json_str);
                    JSONObject jsonObj = new JSONObject(json_str);
                    name = jsonObj.get("Prod_Name").toString();
               /*     cal = jsonObj.getJSONArray("Calories").toString();
                    cooked = jsonObj.getJSONArray("Cooked").toString();
                    nutrients = jsonObj.getJSONArray("Nutrients").toString();
                    bbd = jsonObj.getJSONArray("BBD").toString();
                    processed = jsonObj.getJSONArray("Process").toString();
                    //expiry_date = jsonObj.getJSONArray("ED").toString();
                    allergens = jsonObj.getJSONArray("Allergens").toString();
                    */
                }catch (JSONException e) {
                    Log.d(TAG, "An error occured with the json!");
                }catch (NullPointerException e){
                    Log.d(TAG,"Received null data!");
                }
                /*
                if(allergens.isEmpty()) {
                    Allergens.setText("Allergens : None");
                }else{
                    for(int i = 0; i < allergens.size();i++) {
                        allergens_print = allergens_print + allergens.get(i);
                        if(i != allergens.size() -1){
                            allergens_print = allergens_print + " , ";
                        }
                    }
                    Allergens.setText("Allergens : " + allergens_print);
                }
                Nutrients = (TextView) findViewById(R.id.nutrients);
                nutrients_print = "";
                if(nutrients.isEmpty()) {
                    Nutrients.setText("Nutrients : None");
                }else{
                    for(int i = 0; i < nutrients.size();i++) {
                        nutrients_print = nutrients_print + nutrients.get(i);
                        if(i != nutrients.size() -1){
                            nutrients_print = nutrients_print + " , ";
                        }
                    }
                    Nutrients.setText("Nutrients : " + nutrients_print);
                }
                */
                setContentView(R.layout.activity_product_info);
                Name.setText( name);
/*                Cal = (TextView) findViewById(R.id.Calories);
                Cal.setText(cal);
                Allergens = (TextView) findViewById(R.id.allergens);
                allergens_print = "";
                Cooked = (TextView) findViewById(R.id.cooked);
                Cooked.setText("Cooked : " + cooked);
                BBD = (TextView) findViewById(R.id.BBD);
                BBD.setText(bbd);
                Processed = (TextView) findViewById(R.id.Process);
                Processed.setText("Process : " + processed);
*/
            }








    }

ProductInfo.java

/*
PAUSE FOR PRAYER

Dear God,
Please help me find any malicious bugs that I've created
and ,yet, I can't spot.
Make my code free of errors.


END PRAYER
*/

package gq.yigit.foodcloud;

import android.content.Intent;
import android.nfc.Tag;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Button;

import com.google.api.client.json.JsonObjectParser;
import com.google.firebase.database.*;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import android.view.View.OnClickListener;
import android.widget.Toast;

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

public class ProductInfo extends AppCompatActivity implements OnClickListener {
    private static final String TAG = "MainActivity";
    private TextView Name;
    private TextView Cal;
    private TextView Cooked;
    private TextView Nutrients;
    private TextView BBD;
    private TextView Processed;
    private TextView Problematic;
    private TextView Allergens;
    private String name;
    private String  cal;
    private String cooked;
    private String nutrients;
    private ArrayList nutrients_array;
    private String bbd;
    private String processed;
    private String expiry_date;
    private String allergens;
    private ArrayList allergens_array;
    public String json_str;
    public JSONObject Prod;
    private Button scanBtn;
    private Button jrnyBtn;
    public String prod_loc;
    public String allergens_print = new String();
    public String nutrients_print = new String();



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


    }

    @Override
    public void onClick(View v){
        if (v.getId() == R.id.button) {
            Intent i = new Intent(ProductInfo.this, MainActivity.class);
            startActivity(i);
        }if (v.getId() == R.id.journey) {
            Intent i = new Intent(ProductInfo.this, LearnMore.class);
            i.putExtra("key", prod_loc);
            startActivity(i);
        }
    }

    public void onStart(){
        super.onStart();
        setContentView(R.layout.activity_product_info);
        scanBtn = (Button)findViewById(R.id.button);
        scanBtn.setOnClickListener(this);
        jrnyBtn = (Button)findViewById(R.id.journey);
        jrnyBtn.setOnClickListener(this);


                Bundle extras = getIntent().getExtras();
                if (extras != null) {
                    prod_loc = extras.getString("key");
                }

                PHPComm comm = new PHPComm(this);
                comm.execute("get", "1", "Products");

            }

            public void continueApp(String json_str){
                try {
                    Log.d(TAG,"This is a pointer");
                    Log.d(TAG,"Got json str " + json_str);
                    JSONObject jsonObj = new JSONObject(json_str);
                    name = jsonObj.get("Prod_Name").toString();
               /*     cal = jsonObj.getJSONArray("Calories").toString();
                    cooked = jsonObj.getJSONArray("Cooked").toString();
                    nutrients = jsonObj.getJSONArray("Nutrients").toString();
                    bbd = jsonObj.getJSONArray("BBD").toString();
                    processed = jsonObj.getJSONArray("Process").toString();
                    //expiry_date = jsonObj.getJSONArray("ED").toString();
                    allergens = jsonObj.getJSONArray("Allergens").toString();
                    */
                }catch (JSONException e) {
                    Log.d(TAG, "An error occured with the json!");
                }catch (NullPointerException e){
                    Log.d(TAG,"Received null data!");
                }
                /*
                if(allergens.isEmpty()) {
                    Allergens.setText("Allergens : None");
                }else{
                    for(int i = 0; i < allergens.size();i++) {
                        allergens_print = allergens_print + allergens.get(i);
                        if(i != allergens.size() -1){
                            allergens_print = allergens_print + " , ";
                        }
                    }
                    Allergens.setText("Allergens : " + allergens_print);
                }
                Nutrients = (TextView) findViewById(R.id.nutrients);
                nutrients_print = "";
                if(nutrients.isEmpty()) {
                    Nutrients.setText("Nutrients : None");
                }else{
                    for(int i = 0; i < nutrients.size();i++) {
                        nutrients_print = nutrients_print + nutrients.get(i);
                        if(i != nutrients.size() -1){
                            nutrients_print = nutrients_print + " , ";
                        }
                    }
                    Nutrients.setText("Nutrients : " + nutrients_print);
                }
                */
                setContentView(R.layout.activity_product_info);
                Name.setText( name);
/*                Cal = (TextView) findViewById(R.id.Calories);
                Cal.setText(cal);
                Allergens = (TextView) findViewById(R.id.allergens);
                allergens_print = "";
                Cooked = (TextView) findViewById(R.id.cooked);
                Cooked.setText("Cooked : " + cooked);
                BBD = (TextView) findViewById(R.id.BBD);
                BBD.setText(bbd);
                Processed = (TextView) findViewById(R.id.Process);
                Processed.setText("Process : " + processed);
*/
            }








    }

1 Ответ

0 голосов
/ 24 июня 2018

Вы устанавливаете setContentView(R.layout.activity_product_info); несколько раз.Это не обязательно.Сохраняйте его только в onCreate, поскольку setContentView перезапишет макет и заменит его новым.

Для PHPcomm.java удалите setContentView, помещенные после super.onStart(); и перед Name.setText( name); в onStart()

Сделайте это для ProductInfo.java тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...