передача переменной классам - PullRequest
0 голосов
/ 26 апреля 2018

Не могу понять, как передать результаты от onActivityResult в resultBreakdown. Я знаю, что есть get / set, и я посмотрел несколько уроков, но я просто не понимаю. Или есть лучший способ? Программа работает нормально, если я закомментирую * / resultBreakdown Class

Примечание: я только начал с Java / Android. Я лучше учусь, чем чтение. Я знаю, что мой код немного неуклюжий. Спасибо за помощь

Примечание: я отредактировал код, чтобы отразить предлагаемые изменения

package com.example.spdwiz18.testproject;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View.OnClickListener;

import com.google.android.gms.common.api.CommonStatusCodes;
import com.google.android.gms.vision.barcode.Barcode;

import java.text.DateFormat;
import java.time.*;
import java.time.temporal.*;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;


public class GrindLogActivity extends AppCompatActivity {
TextView barcodeResult;




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

    // this is how to set id's from the xml file with vNames. (julianDate)
    TextView bcc = (Textview)findViewById(R.id.bccheck);
    TextView pc = (Textview)findViewById(R.id.pcode);
    TextView pd = (Textview)findViewById(R.id.pdate);
    // TextView en = (Textview)findViewById(R.id.estnum);
    TextView sn = (Textview)findViewById(R.id.seqnum);
    TextView nw = (Textview)findViewById(R.id.nweight);
    barcodeResult = (TextView) findViewById(R.id.barcode_result);
    TextView julianDate = (TextView) findViewById(R.id.datecode);
    TextView td1 = (TextView) findViewById(R.id.todaydate1);


    // this is how you get a julian/original date for android
        LocalDate now = LocalDate.now();
        int julian = now.get(ChronoField.DAY_OF_YEAR);
    // this how to set you current date for android
        Date date = new Date();
        String stringDate = DateFormat.getDateInstance().format(date);
    // this is how to set your vNames to your method variables
        julianDate.setText(Integer.toString(julian));
        td1.setText(stringDate);

}

/*add click event to the scan barcode button */
public void scanBarcode(View v) {
    Intent intent = new Intent(this, ScanBarcodeActivity.class);
    startActivityForResult(intent, 0);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 0) {
        if (requestCode == CommonStatusCodes.SUCCESS) {
            if (data != null) {
                Barcode barcode = data.getParcelableExtra("barcode");
                barcodeResult.setText("Barcode value : " + barcode.displayValue);
            } else {
                barcodeResult.setText("No Barcode Found");
            }
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}
public void resultsBreakdown(String result) {
if (result.length() == 44) {
    pc.setText(result.CharSequence(2,10));
    pd.setText(result.CharSequence(13,18));
    sn.setText(result.CharSequence(21,27));
    nw.setText(result.CharSequence(13,18));
} else {
    bcc.setText("invalid barcode");
}

}

Ответы [ 5 ]

0 голосов
/ 27 апреля 2018

Спасибо за помощь всем. Этот работал как нужно

package com.example.spdwiz18.testproject;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View.OnClickListener;

import com.google.android.gms.common.api.CommonStatusCodes;
import com.google.android.gms.vision.barcode.Barcode;

import java.text.DateFormat;
import java.time.*;
import java.time.temporal.*;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;


public class GrindLogActivity extends AppCompatActivity {
TextView barcodeResult;
TextView bcc;
TextView pc;
TextView pd;
TextView sn;
TextView nw;


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


    bcc = (TextView)findViewById(R.id.bccheck);
    pc = (TextView)findViewById(R.id.pcode);
    pd = (TextView)findViewById(R.id.pDate);
    // TextView en = (TextView)findViewById(R.id.estnum);
    sn = (TextView)findViewById(R.id.seqnum);
    nw = (TextView)findViewById(R.id.nweight);
    barcodeResult = (TextView) findViewById(R.id.barcode_result);
    TextView julianDate = (TextView) findViewById(R.id.datecode);
    TextView td1 = (TextView) findViewById(R.id.todaydate1);

    // this is how to set id's from the xml file with vNames. (julianDate)

    // this is how you get a julian/original date for android
        LocalDate now = LocalDate.now();
        int julian = now.get(ChronoField.DAY_OF_YEAR);
    // this how to set you current date for android
        Date date = new Date();
        String stringDate = DateFormat.getDateInstance().format(date);
    // this is how to set your vNames to your method variables
        julianDate.setText(Integer.toString(julian));
        td1.setText(stringDate);

}

/*add click event to the scan barcode button */
public void scanBarcode(View v) {
    Intent intent = new Intent(this, ScanBarcodeActivity.class);
    startActivityForResult(intent, 0);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 0) {
        if (requestCode == CommonStatusCodes.SUCCESS) {
            if (data != null) {
                Barcode barcode = data.getParcelableExtra("barcode");
                barcodeResult.setText("Barcode value : " + barcode.displayValue);
                resultsBreakdown(barcode.displayValue.toString());
            } else {
                barcodeResult.setText("No Barcode Found");
            }
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}
public void resultsBreakdown(CharSequence result) {
    if (result.length() == 44) {
        pc.setText(result.subSequence(2,10));
        pd.setText(result.subSequence(13,18));
        sn.setText(result.subSequence(21,27));
        nw.setText(result.subSequence(13,18));
    } else {
        bcc.setText("invalid barcode");
    }

}}

0 голосов
/ 26 апреля 2018

Отправленный код требует много работы - так что этот ответ, скорее всего, только частичный

(1) Инициализация TextView в неправильном месте

TextView s, объявленные как переменные экземпляра класса, также не могут быть инициализированы в этой точке. Поэтому оставьте объявления там (где объявлен bardcodeResult):

TextView barcodeResult;
TextView bcc;
TextView pc;
TextView pd;
TextView sn;
TextView nw;

, но перенесите инициализацию в метод onCreate таким же образом barcodeResult.

// in onCreate
barcodeResult = (TextView) findViewById(R.id.barcode_result);
bcc = (TextView)findViewById(R.id.bccheck);
pc = (TextView)findViewById(R.id.pcode);
pd = (TextView)findViewById(R.id.pdate);
sn = (TextView)findViewById(R.id.seqnum);
nw = (TextView)findViewById(R.id.nweight);

(2) Синтаксис resultsBreakdown недействителен, а функциональность неверна (необходимо вызвать setText) - попробуйте:

  public void resultsBreakdown(String result) {
    if (result.length() == 44) {
         pc.setText(result.CharSequence(2,10));
         pd.setText(result.CharSequence(13,18));
       sn.setText(result.CharSequence(21,27));
         nw.setText(result.CharSequence(13,18));
    } else {
        bcc.setText("invalid barcode");
    }
}

(3) На самом деле вызовите метод resultsBreakdown:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 0) {
        if (requestCode == CommonStatusCodes.SUCCESS) {
            if (data != null) {
                Barcode barcode = data.getParcelableExtra("barcode");
                barcodeResult.setText("Barcode value : " +                  barcode.displayValue);

                //-- THIS LINE WAS ADDED TO CALL METHOD
                resultsBreakdown(barcode.displayValue.toString());
           } else {
               barcodeResult.setText("No Barcode Found");
           }
           super.onActivityResult(requestCode, resultCode, data);
        }
   }
}
0 голосов
/ 26 апреля 2018

Код неполный, так как вы не поместили ScanBarcodeActivity файл Java. Хорошо ... Я помещаю небольшой код в мой проект, который очистит вашу концепцию, и даже вы можете использовать его.


Здесь предположим, что я нахожусь в действии MyClassA.java, где находится кнопка, и при нажатии на нее запускается другое действие MyClassB.java. Помните, что оно будет запускать это действие вместе с макетом ... с этого действия вы должны завершить его определенное событие, и когда оно закончится, ваш MyClassA.java соберет свой результат ...


Из действия MyClassA.java при нажатии кнопки я хочу начать действие MyClassB.java для результата:

ContactsBtn.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            ContactsBtn.setEnabled(false);
            Intent intent = new Intent(MyClassA.this, MyClassB.class);
            startActivityForResult(intent, REQUEST_CODE);

        }
    });

Где REQUEST_CODE должен быть объявлен в классе MyClassA как public static final int REQUEST_CODE = 1;


Now From Activity MyClassB.java о конкретном событии, нажав на кнопку, вы хотите закрыть это действие и отправить результат в предыдущее действие:

SelectContactsButton.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            Intent intent = new Intent();
            intent.putStringArrayListExtra("WhitelistNames", (ArrayList<String>) WhitelistNames);

            setResult(Activity.RESULT_OK, intent);
            finish();
          }
    });

Здесь я помещаю WhitelistNames список массивов как результат для отправки в вызывающую деятельность.


Теперь из задания MyClassA.java снова вы должны получить результат с помощью:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{

    if (requestCode == REQUEST_CODE)
    {

        if (resultCode == Activity.RESULT_OK)
        {
            ArrayList<String> WhitelistNames = data.getStringArrayListExtra("WhitelistNames");

            Log.d("ContactsContracts", "\nPREVIOUS LIST  : "+ContactsNumbers);
        }
   }
}

Помните, что метод onActivityResult должен быть частью вашего MyClassA.java класса и не должен быть ни в onCreate, ни в некоторых других существующих стандартных методах этого класса.

Надеюсь, это поможет

0 голосов
/ 26 апреля 2018

Я думаю, что должно быть resultCode вместо requestCode в requestCode == CommonStatusCodes.SUCCESS

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 0) {
        if (resultCode == Activity.RESULT_OK) {
            if (data != null) {
                Barcode barcode = data.getParcelableExtra("barcode");
                barcodeResult.setText("Barcode value : " + barcode.displayValue);
                resultsBreakdown(barcode.displayValue)
            } else {
                barcodeResult.setText("No Barcode Found");
            }
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}
public void resultsBreakdown(String barcodeData){
    if (barcodeData.length == (44)) {
        pc = (barcodeData.CharSequence(2,10);
        pd = (barcodeData.CharSequence(13,18);
        sn = (barcodeData.CharSequence(21,27);
        nw = (barcodeData.CharSequence(13,18);
    )else(
        bcc = "invalid barcode";
    }
)               
}
0 голосов
/ 26 апреля 2018

resultBreakdown ни класс, ни метод. Он даже не компилируется. Вы меняете свой результатBreakDown на Метод:

public void resultsBreakdown(Barcode barcodeResult){
    if (barcodeResult.length == (44)) {
        pc = (barcodeResult.CharSequence(2,10);
        pd = (barcodeResult.CharSequence(13,18);
        sn = (barcodeResult.CharSequence(21,27);
        nw = (barcodeResult.CharSequence(13,18);
}       else{
                bcc = "invalid barcode";
    }

и позже в onActivityResult вызовите ваш метод с параметрами Barcode.

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