2013-03-22 51 views
1

我是來自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; 
     } 
    } 
} 
+0

「Eclipse中說,有與問題」請張貼*確切*錯誤消息。 – 2013-03-22 01:48:04

+0

我直到現在纔看到您的回覆。 Eclipse用紅旗標記行,並且在修復它之前我無法運行該應用程序。紅旗在onCreate部分,並說「Mytask無法解析爲類型」。這個特定的錯誤來自我的代碼,我試圖在下面包含來自@drewmore的建議。當我將鼠標懸停在紅色下劃線部分時,我得到了Eclipse認爲需要解決問題的建議。要獲得這些選項的列表,請參閱我對以下答案的回覆。沒有日誌錯誤,無法運行。 – 2013-03-23 21:04:53

+0

請注意,「Mytask」與** MyTask沒有相同之處。 Java區分大小寫。您需要確保您的類的名稱與變量聲明中的類型完全匹配。 – 2013-03-25 20:28:06

回答

2

您沒有正確初始化類MyTask的新對象。這裏是如何做到這一點:

MyTask mt = new MyTask()

MyTask是一類,以便利用它,你必須創建一個新的實例。你可以致電{ClassName} {instanceName} = new {ClassName(parameters defined by a constructor of the class ClassName)}。關於在java中創建各種對象,這是真的。

歡迎面向對象編程在Java中:)

+0

歡迎來到爪哇的OOP:P – Tushar 2013-03-22 01:47:35

+0

好的,在嘗試了你的建議之後,它提醒我我以前來過這裏。我在(使用您的建議)「Mytask」部分出現錯誤。 Eclipse給了我8個建議,包括創建一個新類Mytask,或者一個枚舉或一個接口.....我在這裏做錯了什麼。我明白你的建議。我想我錯過了別的東西。 – 2013-03-23 02:36:19

+0

對不起,忘了提及你的名字,所以你會收到我的回覆通知。感謝您迄今爲止的幫助。@drewmore – 2013-03-23 02:45:19

相關問題