2015-10-01 48 views
1
apply plugin: 'com.android.application' 

android { 
compileSdkVersion 15 
buildToolsVersion "23.0.1" 

defaultConfig { 
    applicationId "com.android.justmakan.androidhive" 
    minSdkVersion 15 
    targetSdkVersion 15 
    versionCode 1 
    versionName "1.0" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'} 
    } 
} 

這是我的android build.gradle。Android API 15:AsyncTask未運行(Android Studio 1.3.2)

class get_Username extends AsyncTask<Void, Void, Void> { 

    protected void onPreExecute() 
    { 
     super.onPreExecute(); 
    } 

    protected Void doInBackground(Void... args) { 
       params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("user_id", user_id)); 
       json = jParser.makeHttpRequest(url_get_username, "POST", params); 
       Log.e("User Response: ", "> " + json); 
       try { 
        int success = json.getInt("success"); 
        if (success == 1) { 
         JSONArray usernames = json.getJSONArray("users"); 

         for(int g = 0; g < usernames.length(); g++) 
         { 
          JSONObject o = usernames.getJSONObject(g); 
          username = o.getString("username"); 
         } 

        } 

       } catch (JSONException e) { 
        e.printStackTrace();} 
     return null; 
    } 

    protected void onPostExecute(Void file_url) 
    { 
     super.onPostExecute(file_url);} 
} 

類get_Username是我的AsyncTask未在我的主人主要活動運行

public class Owner extends Activity implements AdapterView.OnItemSelectedListener { 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.owner_activity); 

    spinnerLocation = (Spinner) findViewById(R.id.spinLocation); 
    spinnerFood = (Spinner) findViewById(R.id.spinFood); 
    inputUsername = (EditText) findViewById(R.id.etUsername); 
    inputDescription = (EditText) findViewById(R.id.etDescription); 

    // spinnerLocation.setOnItemSelectedListener(this); 
    // getting product details from intent 

    Intent tempI = getIntent(); 
    user_id = tempI.getStringExtra("user_id"); 

    new get_Username().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

    inputUsername.setText(username); 
    inputUsername.setEnabled(false); 

業主的活動,假設是顯示在TextView的inputUsername列

<?php 

$response = array(); 

if (isset($_POST['user_id'])) 
{ 

$user_id = $_POST['user_id']; 

require_once 'db_connect.php'; 

$db = new DB_CONNECT(); 


$results = mysql_query("SELECT * FROM user WHERE user_id = '$user_id'") or die(mysql_error()); 

    $response["users"] = array(); 
    while ($row = mysql_fetch_array($results)) 
    { 
     $users = array(); 
     $users["username"] = $row["username"] 
     array_push($response["users"], $users); 
    } 

    // success 
    $response["success"] = 1; 

    // echoing json result 
    echo json_encode($response);} 

else { 
$response["success"] = 0; 
$response["message"] = "Required field(s) is missing"; 

echo json_encode($response);} 

?> 

get_username_by_userid的用戶名。通過使用JsonParser通過android的服務器文件夾中的PHP。

目前,我正在開發一個android應用程序,允許用戶登錄並將mySQL中的user_id發送給所有者活動,TextView應該顯示用戶在get_user列中查看他或她的用戶名。感謝提前。

您doingInbackgroud的
+0

你的變量'username'聲明在哪裏? –

+0

@NicholasAllio它是在類的所有者,我刪除它,因爲有太多的變量聲明 – Louis

+0

由於[DGN](http://stackoverflow.com/a/32882490/2064585)提出,你應該修改自定義的AsyncTask並返回你在'onPostExecute'方法中的值;那是唯一能夠與主''活動正在運行的主線程通信的方法。 –

回答

0

使用@覆蓋頂部和使用,而不是

new get_Username().executeOnExecutor(); 

new get_Username().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
+0

Pirisok,由於以下錯誤而無法執行: 錯誤:類AsyncTask中的方法executeOnExecutor 不能應用於給定的類型; required:Executor,Void [] found:沒有爭議 理由:實際和正式的爭論名單長度不同 – Louis

1

僅供參考,這有什麼好做的build.gradle和Android Studio版本。

請檢查您的doInBackground()方法。你在這裏返回'null'。你應該在這裏返回所需的字符串。趕上postExecute()的結果

protected void onPostExecute(String value) 
{ 
    //Update your UI here using 'value' 
    // super.onPostExecute(file_url);} 

}

希望這有助於。

+0

是否需要在Asynctask 上編輯而不是返回值?它返回null,但變量'username'在所有類(全局)下聲明,所以如果方法更新了用戶名的值並在所有者類中使用 – Louis

+0

在這種情況下,您正在設置'inputUsername.setText(username); '在獲得AsyncTask結果之前。只需將它放在AsyncTask中的onPostExecute()方法中,以便檢查值。 – DGN

+0

我修改它onPostExecute()之類下: runOnUiThread(新的Runnable(){ 公共無效的run(){ inputUsername.setText(用戶名); inputUsername.setEnabled(假); } }); 並在doingInBackground()的末尾檢索後返回用戶名。 – Louis