我是來自PHP的Java新手。這可能是一個新手問題,但我無法通過谷歌找出答案。我試過看教程等。這是我已經達到的點。我覺得我非常接近。開始時,MyTask
內部的代碼位於onClick
部分內。但我得到一個線程問題,我理解。它試圖在主線上做太多事情。於是我瞭解了AsyncTask
並試圖將其納入。我從一個人那裏得到了幫助,他們只能讓我知道這一點。他第一次嘗試幫助將onClick
空出,MyTask
執行onCreate
。這不是我所需要的。我需要從onClick
執行MyTask
。爲了解決這個問題,他建議增加如何從onClick Java調用一個類
myTask = new MyTask();
myTask.execute();
和
MyTask myTask;
到裏面onClick
。
但Eclipse說有問題。它想要創建變量或其他建議。問題是,當我整合這些建議時,Eclipse永遠不會滿意,並一直說存在更多問題。
任何人都可以告訴我如何從onClick
內部調用MyTask
而不反對Eclipse嗎?正如我所說,我是一個新手,而且有時候我會忽略一些概念。如果你有答案,請問你是否儘可能具體?我已經發布了下面的代碼。謝謝你在這裏幫助我。如果您需要更多信息來回答這個問題,請告訴我,我會爲您解答問題。
package com.exmple.myapp;
import org.json.JSONException;
import org.json.JSONObject;
import com.exmple.myapp.LoginActivity.MyTask;
import android.content.Intent;
import android.os.AsyncTask;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class LoginActivity extends Activity {
Button btnLogin;
Button btnLinkToRegister;
EditText inputUser;
EditText inputPassword;
TextView loginErrorMsg;
// JSON Response node names
private static String KEY_SUCCESS = "success";
private static String KEY_ERROR = "error";
private static String KEY_ERROR_MSG = "error_msg";
private static String KEY_UID = "uid";
private static String KEY_NAME = "name";
private static String KEY_EMAIL = "email";
private static String KEY_CREATED_AT = "created_at";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
// Importing all assets like buttons, text fields
inputUser = (EditText) findViewById(R.id.loginUser);
inputPassword = (EditText) findViewById(R.id.loginPassword);
btnLogin = (Button) findViewById(R.id.btnLogin);
btnLinkToRegister = (Button) findViewById(R.id.btnLinkToRegisterScreen);
loginErrorMsg = (TextView) findViewById(R.id.login_error);
myTask = new MyTask();
myTask.execute();
// Login button Click Event
btnLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
MyTask myTask;
}
// Link to Register Screen
/** btnLinkToRegister.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent i = new Intent(getApplicationContext(),
RegisterActivity.class);
startActivity(i);
finish();
}
});
**/
});
}
//*** Move out MyTask
class MyTask extends AsyncTask<Void,Void,Void>{
String user = inputUser.getText().toString();
String password = inputPassword.getText().toString();
@Override
protected Void doInBackground(Void... params) {
UserFunctions userFunction = new UserFunctions();
JSONObject json = userFunction.loginUser(user, password);
// check for login response
try {
if (json.getString(KEY_SUCCESS) != null) {
loginErrorMsg.setText("");
String res = json.getString(KEY_SUCCESS);
if(Integer.parseInt(res) == 1){
// user successfully logged in
// Store user details in SQLite Database
DatabaseHandler db = new DatabaseHandler(getApplicationContext());
JSONObject json_user = json.getJSONObject("user");
// Clear all previous data in database
userFunction.logoutUser(getApplicationContext());
db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL), json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT));
// Launch Dashboard Screen
Intent dashboard = new Intent(getApplicationContext(), GD_Calc.class);
// Close all views before launching Dashboard
dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(dashboard);
// Close Login Screen
finish();
}else{
// Error in login
loginErrorMsg.setText("Incorrect username/password");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
}
「Eclipse中說,有與問題」請張貼*確切*錯誤消息。 – 2013-03-22 01:48:04
我直到現在纔看到您的回覆。 Eclipse用紅旗標記行,並且在修復它之前我無法運行該應用程序。紅旗在onCreate部分,並說「Mytask無法解析爲類型」。這個特定的錯誤來自我的代碼,我試圖在下面包含來自@drewmore的建議。當我將鼠標懸停在紅色下劃線部分時,我得到了Eclipse認爲需要解決問題的建議。要獲得這些選項的列表,請參閱我對以下答案的回覆。沒有日誌錯誤,無法運行。 – 2013-03-23 21:04:53
請注意,「Mytask」與** MyTask沒有相同之處。 Java區分大小寫。您需要確保您的類的名稱與變量聲明中的類型完全匹配。 – 2013-03-25 20:28:06