PutExtra getExtra in RecyclerView not working - android

I need help.
I create android recyclerview cardview project, when data list from cardview clicked (use putExtra dan getExtra) will call new activity , but not working (in new activity blank no content).
this my code (CardViewAndroidAdapter.java) my full code error when i paste in here - ask in stackoverflow
holder.btnDetail.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("PUT_PHOTO", getListAndroid().get(position).getPhoto());
intent.putExtra("PUT_DESK", getListAndroid().get(position).getDesk());
context.startActivity(intent);
}
});
this my code (DetailActivity.java) my full code error when i paste in here
public class DetailActivity extends AppCompatActivity {
private static final String GET_PHOTO = "get_photo";
private static final String GET_DESK = "get_desk";
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
getSupportActionBar().setTitle("Detail Version");
getIncomingIntent();
}
private void getIncomingIntent() {
if(getIntent().hasExtra(GET_PHOTO)&&getIntent().hasExtra(GET_DESK)){
String getPhoto=getIntent().getStringExtra(GET_PHOTO);
String getDesk = getIntent().getStringExtra(GET_DESK);
TextView detail=findViewById(R.id.tv_detail);
detail.setText(getDesk);
ImageView img_item_photo=findViewById(R.id.img_item_photo);
Glide.with(this)
.load(getPhoto)
.into(img_item_photo);
}
}

Replace this:
intent.putExtra("PUT_PHOTO", getListAndroid().get(position).getPhoto());
intent.putExtra("PUT_DESK", getListAndroid().get(position).getDesk());
with this:
intent.putExtra(DetailActivity.GET_PHOTO, getListAndroid().get(position).getPhoto());
intent.putExtra(DetailActivity.GET_DESK, getListAndroid().get(position).getDesk());
It should work now.

Related

Executing URL with parameters using AsyncTask

I've got little problem with implementing asynctask for my class project.
"PART_OF_URL?title="+tytul+"&author="+autor+"&date="+dataSt+"&username="+imieSt
so this is whole string that should be executed, it works "perfectly" fine like this:
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse("PART_OF_URL?title="+tytul+"&author="+autor+"&date="+dataSt+"&username="+imieSt));
startActivity(i);
Which sends data to PART_OF_URL website that display order list
but instead of that it should be done in asynctask.
Here is whole activity code that handle sending data:
public class Zamowienie extends AppCompatActivity {
TextView tytulzamowieniaTV;
EditText data;
EditText imie;
Button zamawiaj;
Button anuluj;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zamowienie);
tytulzamowieniaTV=findViewById(R.id.tytulZamwowienia);
data=findViewById(R.id.data);
imie=findViewById(R.id.imie);
zamawiaj=findViewById(R.id.zamawiaj);
anuluj=findViewById(R.id.anuluj);
tytulzamowieniaTV.setText(getIntent().getStringExtra("Tytul"));
String tytul=getIntent().getStringExtra("Tytul");
String autor=getIntent().getStringExtra("Autor");
wyslijZamowienie(tytul,autor);
}
public void wyslijZamowienie(String tytul,String autor){
zamawiaj.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
String dataSt=data.getText().toString();
String imieSt=imie.getText().toString();
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse("PART_OF_URL?title="+tytul+"&author="+autor+"&date="+dataSt+"&username="+imieSt));
startActivity(i);
}
});
}
}
Understanding asynctask is problematic for me so any help is appreciated.

How to send array of objects to activity

I read some example on this website and other but still have error.
It's not a compilation error but my application crash when I click on the button.
There is code of my MainActivity.java (only interesting part) :
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//blablabla
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.myLayout= (LinearLayout) findViewById(R.id.layoutProp);
Button button = (Button) findViewById(R.id.buttonValider);
button.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
openActivity2();
}
});
}
public void openActivity2() {
Intent intent = new Intent(this, Activity2.class);
intent.putExtra(EXTRA_TEXT, text); // this one does not work
intent.putExtra(EXTRA_NUMBER, nbTextView);
startActivity(intent);
}
}
And code in Activity2.java
public class Activity2 extends AppCompatActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
Intent intent = getIntent();
int nbTextView = intent.getIntExtra(MainActivity.EXTRA_NUMBER, 0);
MyTextView[] text = (MyTextView[]) intent.getSerializableExtra(MainActivity.EXTRA_TEXT);
TextView textView1 = (TextView) findViewById(R.id.TVtest);
textView1.setText(""+ nbTextView);
} }
if I comment : MyTextView[] text =(MyTextView[])intent.getSerializableExtra(MainActivity.EXTRA_TEXT);
the application does not crash.
Thank you all very much for your help
You cannot pass views through intents. Views are part of the layout and cannot be shared between activities.
If you want to pass array with custom objects you must implement a Parcelable or Serializable class and use:
getIntent().getParcelableExtra("array");
or
getIntent().getSerializableExtra("array");
Parcelable class will be faster but it is harder to implement.
Another way is to use a library like Gson to parse your data to Json and pass it as a string.

Pass DatabaseReference one activity to another using .putExtra() or whatever?

public class MoreQP extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
FirebaseDatabase database;
DatabaseReference mDatabase;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_more_qp);
filterSearchButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
showResult();
}
});
resultCard.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
Intent showresulPage = new Intent(MoreQP.this, ShowQuestion.class);
showresulPage.putExtra(mDatabase);
showresulPage.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
MoreQP.this.startActivity(showresulPage);
finish();
}
});
}
public void showResult(){
resultDisplay.setText(selectedSubject+"\n"+sy+" "+ss+" "+se);
resultCard.setVisibility(resultCard.VISIBLE);
//"selectedSubject","sy","ss" etc.. I have taken these values from multiple spinner.
mDatabase = FirebaseDatabase.getInstance().getReference().child("Department").child("CSE").child("Year").child(sy).child(ss).child(se).child(whichSemester).child(selectedSubject);
}
}
Here is the short-cut version of my code. I want to pass Firebase reference "mDatabase" to my 2nd Activity. I took all those values from multiple spinners. So is there any way to pass this reference to new activity? And how I can receive it on 2nd activity?
There is no need to add the DatabaseReference object to an Intent in order to use it to another activity, just simply create the same DatabaseReference and use it in the second activity. That's it!
You can not put Storage / Database Reference in putExtra but you can certainly put string value of path
'String storageRef = "group/"+UID+"/"+"profileImage";
String postUploadRef="User/"+UID;'
Intent mServiceIntent = new Intent(ProfileActivity.this, UploadService.class);
mServiceIntent.putExtra("stream", filePath);
mServiceIntent.putExtra("stroageRef", storageRef);
mServiceIntent.putExtra("postUploadRef", postUploadRef);
startService(mServiceIntent);

passing data from activity to activity in android

What is the problem with my code :(
This is the sending class:
public class Send extends AppCompatActivity {
String message_text;
final static String MSG_KEY = "this.is.the.message";
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.send_layout);
}
public void sendMessage(View view) {
EditText entryText = (EditText)findViewById(R.id.message_text);
message_text = entryText.getText().toString();
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra(message_text, MSG_KEY);
startActivity(intent);
}
}
this is the receiver:
public class MainActivity extends AppCompatActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView theMessage = (TextView)findViewById(R.id.theMessage);
theMessage.setText(getIntent().getStringExtra("this.is.the.message"));
}
}
the app starts but it does not pass text, just an empty recieving activity ???
intent.putExtra(message_text, MSG_KEY);
replace with
intent.putExtra(MSG_KEY, message_text);
Frist argument is NAME , second argument - VALUE
You are using value as key and key as value which is causing this issue.
Change
intent.putExtra(message_text, MSG_KEY);
to
intent.putExtra(MSG_KEY, message_text);
If changing intent.putExtra(MSG_KEY, message_text); doesn't fix the issue. Check AndroidManifest.xml to make sure that MainActivity is not the launcher otherwise your MainActivity starts before the send class.

Android Intents to pass data

I don't know why, but this isn't working. Can anyone see anything wrong with my code.
I have two activities and I'm passing data from two
public class InputActivity extends AppCompatActivity {
EditText number1EditText;
EditText number2EditText;
Button addButton;
InputActivity code looks like this
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_input);
number1EditText = (EditText)findViewById(R.id.editText);
number2EditText = (EditText)findViewById(R.id.editText2);
addButton = (Button)findViewById(R.id.button);
addButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Intent mIntent = new Intent(getApplicationContext(), AddActivity.class);
mIntent.putExtra("number1", number1EditText.getText().toString());
mIntent.putExtra("number2", number2EditText.getText().toString());
startActivity(mIntent);
}
});
}
AddActivity code looks like this
public class AddActivity extends AppCompatActivity {
TextView answer;
double y=0;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
answer =(TextView)findViewById(R.id.textView);
String value1 = getIntent().getExtras().getString("number1");
String value2 = getIntent().getExtras().getString("number2");
answer.setText((int) (Double.parseDouble(value1)+Double.parseDouble(value2)));
}
Just looking quickly:
answer.setText((int) (Double.parseDouble(value1)+Double.parseDouble(value2)));
You're passing a int to the method setText() which happens to have an overload that receives a int argument for the cases when you pass the reference from a String in some xml. You may be getting a ResourceNotFoundException.
If you want to show a text with the sum between your values:
answer.setText(String.valueOf((int) (Double.parseDouble(value1)+Double.parseDouble(value2))));
Just keep in mind that there are a lot of checks you have to do first, you may get another exceptions doing this kind of parse, like NumberFormatException for instance.

Categories

Resources