我正在构建一个小型Android应用,让人们通过电子邮件客户端捐赠食物。在用户提供基本信息(例如姓名,位置,食物类型等)之后,我似乎无法检索输入信息以将其合并到电子邮件文本内容中。为变量(来自EditText的用户输入)提供的空间保持输出“null”而不是显示用户的信息。
这是XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">
<TextView
android:id="@+id/textView7"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Name of Company / Individual:" />
<EditText
android:id="@+id/etCompName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:textAllCaps="true"
android:hint="Ex: Chicken Hut, Kaldi's Coffee, etc" />
<TextView
android:id="@+id/textView8"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Telephone Number (required)" />
<EditText
android:id="@+id/etPhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Ex: 0922092161"
android:inputType="phone" />
<TextView
android:id="@+id/textView9"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Describe your Location:" />
<EditText
android:id="@+id/etLocation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:textAllCaps="true"
android:hint="Briefly describe where you are located..." />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Food Type:" />
<EditText
android:id="@+id/etFoodType"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:textAllCaps="true"
android:hint="Ex: Local Food, Sandwiches, etc." />
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Estimated Quantity (in grams):" />
<EditText
android:id="@+id/etQuantity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:textAllCaps="true"
android:hint="Ex: 1kg, 50g, etc." />
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Snap a Picture of Food (if available)" />
<ImageView
android:id="@+id/ivFood"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
android:layout_weight="0.22" />
<Button
android:id="@+id/bCam"
style="@style/Widget.AppCompat.Button.Borderless.Colored"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
android:background="#ee9d3e"
android:text="Open Camera"
android:textColor="#ffffff" />
<Button
android:id="@+id/bSubmit"
android:background="#cecbc8"
android:textColor="#ffffff"
android:onClick="onButtonClickSend"
style="@android:style/Widget.DeviceDefault.Button.Borderless"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Submit" />
</LinearLayout>
这是Java:
package com.example.android.foodshare;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
public class Donation extends AppCompatActivity {
EditText company_name;
EditText phone_number;
EditText location;
EditText foodType;
EditText quantity;
String companyNameString;
String phoneNumberString;
String locationString;
String foodTypeString;
String quantityString;
String emailTo = "kalid.mawi@briswieth.com";
String emailSubject = "New Food Pickup Request From " + companyNameString;
// maybe add from which company
String emailContent = "You have received a Food Pickup Request. Please find
further details below:\n\n" +
"Name of Organization (or Individual): " + companyNameString + "\n"
+
"Telephone Number: " + phoneNumberString + "\n" +
"Location: " + locationString + "\n" +
"Available Food Type: " + foodTypeString + "\n" +
"Quantity Available: " + quantityString;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.donation);
company_name = (EditText) findViewById(R.id.etCompName);
phone_number = (EditText) findViewById(R.id.etPhone);
location = (EditText) findViewById(R.id.etLocation);
foodType = (EditText) findViewById(R.id.etFoodType);
quantity = (EditText) findViewById(R.id.etQuantity);
}
public void onButtonClickSend(View v) {
companyNameString = company_name.getText().toString();
phoneNumberString = phone_number.getText().toString();
locationString = location.getText().toString();
foodTypeString = foodType.getText().toString();
quantityString = quantity.getText().toString();
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{emailTo});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, emailSubject);
emailIntent.putExtra(Intent.EXTRA_TEXT, emailContent);
//need this to prompts email client only
emailIntent.setType("message/rfc822");
startActivity(Intent.createChooser(emailIntent, "Select an Email Client:"));
}
}
这是输出“null”作为我的错误的一部分:
*您已收到食品取件申请。请在下面找到更多详细信息:
组织名称(或个人):null
电话号码:null
位置:null
可用食物类型:null
可用数量:null *
谢谢!
答案 0 :(得分:1)
在构造Activity实例时,已经将emailContent
构建为字段初始化。相反,只需声明它,然后在按钮点击时初始化如下:
String emailContent;
public void onButtonClickSend(View v) {
companyNameString = company_name.getText().toString();
phoneNumberString = phone_number.getText().toString();
locationString = location.getText().toString();
foodTypeString = foodType.getText().toString();
quantityString = quantity.getText().toString();
emailContent = "You have received a Food Pickup Request. Please find
further details below: \n\ n " +
"Name of Organization (or Individual): " + companyNameString + "\n" +
"Telephone Number: " + phoneNumberString + "\n" +
"Location: " + locationString + "\n" +
"Available Food Type: " + foodTypeString + "\n" +
"Quantity Available: " + quantityString;
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {
emailTo
});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, emailSubject);
emailIntent.putExtra(Intent.EXTRA_TEXT, emailContent);
//need this to prompts email client only
emailIntent.setType("message/rfc822");
startActivity(Intent.createChooser(emailIntent, "Select an Email Client:"));
}
答案 1 :(得分:1)
您正在使用空值声明初始化您的电子邮件内容,之后您不会更改它。这里:
String emailContent = "You have received a Food Pickup Request. Please find
further details below:\n\n" +
"Name of Organization (or Individual): " + companyNameString + "\n"
+
"Telephone Number: " + phoneNumberString + "\n" +
"Location: " + locationString + "\n" +
"Available Food Type: " + foodTypeString + "\n" +
"Quantity Available: " + quantityString;
我建议您先声明它,然后在onButtonClicked监听器中执行上述操作:
public void onButtonClickSend(View v) {
companyNameString = company_name.getText().toString();
phoneNumberString = phone_number.getText().toString();
locationString = location.getText().toString();
foodTypeString = foodType.getText().toString();
quantityString = quantity.getText().toString();
emailContent = "You have received a Food Pickup Request. Please find
further details below:\n\n" +
"Name of Organization (or Individual): " + companyNameString + "\n"
+
"Telephone Number: " + phoneNumberString + "\n" +
"Location: " + locationString + "\n" +
"Available Food Type: " + foodTypeString + "\n" +
"Quantity Available: " + quantityString;
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{emailTo});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, emailSubject);
emailIntent.putExtra(Intent.EXTRA_TEXT, emailContent);
//need this to prompts email client only
emailIntent.setType("message/rfc822");
startActivity(Intent.createChooser(emailIntent, "Select an Email Client:"));
}