"null" EditText 在 Android Studio 中应用于 URL 末尾时出错
Error with "null" EditText applying to end of URL in Android Studio
所以每次我 运行 应用程序,输入一个 ID 并点击提交;最终结果以 null 作为 ID。
例如:我想输入 12345 它应该转到 http://www.hiddenlink.com/12345 but instead it goes to http://www.hiddenlink.com/null
这是我的代码:
public class SearchActivity extends Activity {
Button btnSearchStudent;
String studentID;
private String url = "http://www.hiddenlink.com/" + studentID; // This is test SID just to confirm connection
private static final String TAG_ALLRECORDS = "Objects";
private static final String TAG_ENAME = "emer_name1";
private static final String TAG_EPHONE1 = "emer_Phone1";
private static final String TAG_EPHONE2 = "emer_Phone2";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
EditText txtStudentID = (EditText) findViewById(R.id.txtStudentID);
studentID = txtStudentID.getText().toString();
btnSearchStudent = (Button) findViewById(R.id.btnSearchSID);
btnSearchStudent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SearchActivity.this, SearchResults.class);
startActivity(intent);
new JSONParse().execute();
}
});
}
private class JSONParse extends AsyncTask<Void, Void, Void> {
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(SearchActivity.this);
pDialog.setMessage("Connection Test: Logging into Student Database...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
// Login to APIs
@Override
protected Void doInBackground(Void... args) {
String _username = "hidden";
String _password = "hidden123";
String content = MyHttpURLConnection.getData(url, _username, _password);
try {
// Getting JSON Object from URL Content
JSONObject json = new JSONObject(content);
JSONArray jsonArray = json.getJSONArray(TAG_ALLRECORDS);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject c = jsonArray.getJSONObject(i);
// Storing JSON item in a Variable
String emer_name1 = c.getString(TAG_ENAME);
String emer_Phone1 = c.getString(TAG_EPHONE1);
String emer_Phone2 = c.getString(TAG_EPHONE2);
// Adding value HashMap key => value
HashMap<String, String> add = new HashMap<String, String>();
add.put(TAG_EPHONE1, emer_Phone1);
add.put(TAG_ENAME, emer_name1);
add.put(TAG_EPHONE2, emer_Phone2);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
}
String studentID;
private String url = "http://www.hiddenlink.com/" + studentID;
studentID
这里还没有初始化,所以它的值为null。删除 + studentID
部分并在设置值后添加 studentID
。
@Emd4600 说得对
只有在初始化 edittext 并且其中有一些值后,您才必须添加该值...
为此,只需定义 "url" 变量,但不要向其添加学生 ID:
private String url = "http://www.hiddenlink.com/%s";
稍后当你得到 edittext 时,将 id 添加到 url:
EditText txtStudentID = (EditText) findViewById(R.id.txtStudentID);
[... more code...]
String realUrl = String.format(url, txtStudentID.getText().toString(););
就是这样。
单击按钮后不会重新分配学生 ID,因此由于其基本初始化,它保持为空:
btnSearchStudent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// re-init the student id field
CharSequence input = txtStudentId.getText();
if (input != null) {
studentID = input.toString();
}
Intent intent = new Intent(SearchActivity.this, SearchResults.class);
startActivity(intent);
new JSONParse().execute();
}
});
代码标准
您还应该将全局变量标记为 m<Name>
这是表示该字段是 class 成员变量的标准
推荐
另一种方法是将字符串传递给 AsyncTask 的 execute() 方法,这样您就可以传递多个参数而不是一个,但这需要您将 AsyncTask 更改为处理多个查询。
为什么不直接更改代码:
private String baseUrl = "http://www.hiddenlink.com/";
private String url = "";
btnSearchStudent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
url = baseUrl + txtStudentID.getText().toString();
new JSONParse().execute();
}
});
我缺少重新定位整个的感觉Activity
正如 Emd4600 所写,您的 String studentID
目前尚未初始化。您可能希望在用户点击 btnSearchStudent
时构建并 运行 您的请求。为此,您必须在按钮的 onClick 侦听器中附加 txtStudentId
的内容。
我使用了 Filnik 所说的并且有效。
感谢所有输入的人,非常感谢。
菲尔尼克:
private String baseUrl = "http://www.hiddenlink.com/";
private String url = "";
btnSearchStudent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
url = baseUrl + txtStudentID.getText().toString();
new JSONParse().execute();
}
});
所以每次我 运行 应用程序,输入一个 ID 并点击提交;最终结果以 null 作为 ID。
例如:我想输入 12345 它应该转到 http://www.hiddenlink.com/12345 but instead it goes to http://www.hiddenlink.com/null
这是我的代码:
public class SearchActivity extends Activity {
Button btnSearchStudent;
String studentID;
private String url = "http://www.hiddenlink.com/" + studentID; // This is test SID just to confirm connection
private static final String TAG_ALLRECORDS = "Objects";
private static final String TAG_ENAME = "emer_name1";
private static final String TAG_EPHONE1 = "emer_Phone1";
private static final String TAG_EPHONE2 = "emer_Phone2";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
EditText txtStudentID = (EditText) findViewById(R.id.txtStudentID);
studentID = txtStudentID.getText().toString();
btnSearchStudent = (Button) findViewById(R.id.btnSearchSID);
btnSearchStudent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SearchActivity.this, SearchResults.class);
startActivity(intent);
new JSONParse().execute();
}
});
}
private class JSONParse extends AsyncTask<Void, Void, Void> {
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(SearchActivity.this);
pDialog.setMessage("Connection Test: Logging into Student Database...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
// Login to APIs
@Override
protected Void doInBackground(Void... args) {
String _username = "hidden";
String _password = "hidden123";
String content = MyHttpURLConnection.getData(url, _username, _password);
try {
// Getting JSON Object from URL Content
JSONObject json = new JSONObject(content);
JSONArray jsonArray = json.getJSONArray(TAG_ALLRECORDS);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject c = jsonArray.getJSONObject(i);
// Storing JSON item in a Variable
String emer_name1 = c.getString(TAG_ENAME);
String emer_Phone1 = c.getString(TAG_EPHONE1);
String emer_Phone2 = c.getString(TAG_EPHONE2);
// Adding value HashMap key => value
HashMap<String, String> add = new HashMap<String, String>();
add.put(TAG_EPHONE1, emer_Phone1);
add.put(TAG_ENAME, emer_name1);
add.put(TAG_EPHONE2, emer_Phone2);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
}
String studentID;
private String url = "http://www.hiddenlink.com/" + studentID;
studentID
这里还没有初始化,所以它的值为null。删除 + studentID
部分并在设置值后添加 studentID
。
@Emd4600 说得对
只有在初始化 edittext 并且其中有一些值后,您才必须添加该值...
为此,只需定义 "url" 变量,但不要向其添加学生 ID:
private String url = "http://www.hiddenlink.com/%s";
稍后当你得到 edittext 时,将 id 添加到 url:
EditText txtStudentID = (EditText) findViewById(R.id.txtStudentID);
[... more code...]
String realUrl = String.format(url, txtStudentID.getText().toString(););
就是这样。
单击按钮后不会重新分配学生 ID,因此由于其基本初始化,它保持为空:
btnSearchStudent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// re-init the student id field
CharSequence input = txtStudentId.getText();
if (input != null) {
studentID = input.toString();
}
Intent intent = new Intent(SearchActivity.this, SearchResults.class);
startActivity(intent);
new JSONParse().execute();
}
});
代码标准
您还应该将全局变量标记为 m<Name>
这是表示该字段是 class 成员变量的标准
推荐
另一种方法是将字符串传递给 AsyncTask 的 execute() 方法,这样您就可以传递多个参数而不是一个,但这需要您将 AsyncTask 更改为处理多个查询。
为什么不直接更改代码:
private String baseUrl = "http://www.hiddenlink.com/";
private String url = "";
btnSearchStudent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
url = baseUrl + txtStudentID.getText().toString();
new JSONParse().execute();
}
});
我缺少重新定位整个的感觉Activity
正如 Emd4600 所写,您的 String studentID
目前尚未初始化。您可能希望在用户点击 btnSearchStudent
时构建并 运行 您的请求。为此,您必须在按钮的 onClick 侦听器中附加 txtStudentId
的内容。
我使用了 Filnik 所说的并且有效。 感谢所有输入的人,非常感谢。
菲尔尼克:
private String baseUrl = "http://www.hiddenlink.com/";
private String url = "";
btnSearchStudent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
url = baseUrl + txtStudentID.getText().toString();
new JSONParse().execute();
}
});