2015-01-02 73 views
-2

當我運行我的代碼時,出現致命異常:AsyncTask#1。日誌告訴我這是由ArrayIndexOutOfBoundsException引起的。Android:致命例外:Asynctask#1

這裏是我的項目的代碼 loginactivity

package com.app.amusa; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONObject; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 

public class loginactivity extends Activity { 
    private EditText email, password; 
    private SessionManager session; 
    private JSONArray jsonArray; 
    private JSONObject jsonObject; 
    private Streamer Streamer; 
    private String output,url,success; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_login); 
     session = new SessionManager(getApplicationContext()); 
     Streamer = new Streamer(); 
     Toast.makeText(getApplicationContext(), 
       "User Login Status: " + session.isLoggedIn(), Toast.LENGTH_LONG) 
       .show(); 
     email = (EditText) findViewById(R.id.etEmail); 
     password = (EditText) findViewById(R.id.etPass); 
     TextView register = (TextView) findViewById(R.id.txtregister); 
     register.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(getApplicationContext(), Registeractivity.class); 
      startActivity(i); 
     } 
    }); 
} 
public void login(View v) { 
    if (email.getText().toString().trim().length() > 0 
      && password.getText().toString().trim().length() > 0) 
    { 
     new Masuk().execute(); 
    } 
    else 
    { 
     Toast.makeText(getApplicationContext(), "Email and Password is Empty!!", Toast.LENGTH_LONG).show(); 
    } 
} 

public void dologin(){ 
    try { 
     List<NameValuePair>nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("aksi", "login")); 
     nameValuePairs.add(new BasicNameValuePair("email", email.getText().toString())); 
     nameValuePairs.add(new BasicNameValuePair("password", password.getText().toString())); 
     jsonArray = Streamer.postData(VariabelGlobal.url+"/user.php", nameValuePairs); 
     jsonObject = jsonArray.getJSONObject(0); 
     success = jsonObject.getString(success); 
     JSONArray hasil = jsonObject.getJSONArray("login"); 
     if (success.equals("1")) { 
      for (int i = 0; i < hasil.length(); i++) { 
       JSONObject c = hasil.getJSONObject(i);     
       String nama = c.getString("nama").trim(); 
       String email = c.getString("email").trim(); 
       session.createLoginSession(nama, email); 
       Log.e("ok", " ambil data"); 
      } 
     } else { 
      Log.e("erro", "Can not get datas"); 
     } 
    } catch (Exception e) { 
     // TODO: handle exception 
     e.printStackTrace(); 
} 
    } 
private class Masuk extends AsyncTask<Object, Integer, Void> { 
    private ProgressDialog dialog; 

    @Override 
    protected void onPreExecute() { 
     dialog = new ProgressDialog(loginactivity.this); 
     dialog.setMessage("Is Loging In"); 
     dialog.setIndeterminate(false); 
     dialog.setCanceledOnTouchOutside(false); 
     //dialog.setCancelable(false); 
     dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     dialog.setProgress(0); 
     dialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Object... arg0) { 
     if(arg0[0].equals("login")){ 
      output = "login"; 
      dologin(); 
     } 
     return null; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... progress) { 
     dialog.setProgress(progress[0]); 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     try { 
      dialog.dismiss(); 
      if(output.equals("login")){ 
       Toast.makeText(loginactivity.this, jsonObject.getString("status"), Toast.LENGTH_SHORT).show(); 
       Intent a = new Intent(loginactivity.this, Dashboard.class); 
       startActivity(a); 
       finish(); 
      } 
     } catch (Exception e) { 
     } 

    } 

} 

}

這裏是流光。這是JSON與POST方法

package com.app.amusa; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.List; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.params.HttpConnectionParams; 
import org.apache.http.params.HttpParams; 
import org.json.JSONArray; 

import android.util.Log; 

public class Streamer { 
    private InputStream input; 
    private HttpClient klien; 
    private HttpGet req; 
    private HttpPost post; 
    private HttpResponse response; 
    private BufferedReader dataInput; 
    private HttpEntity httpEntity; 
    private HttpParams params; 

public JSONArray postData(String url, List<NameValuePair> data) { 
    JSONArray jsonArray = null; 
    try { 
     klien = new DefaultHttpClient(); 
     params = klien.getParams(); 
     HttpConnectionParams.setTcpNoDelay(params, true); 
     post = new HttpPost(url); 
     post.setEntity(new UrlEncodedFormEntity(data)); 
     response = klien.execute(post); 
     httpEntity = response.getEntity(); 
     input = httpEntity.getContent(); 
     dataInput = new BufferedReader(new InputStreamReader(input, "iso-8859-1")); 
     StringBuilder sb = new StringBuilder(); 
     String baris = null; 
     while ((baris = dataInput.readLine()) != null) { 
      sb.append(baris + "\n"); 
     } 
     dataInput.close(); 
     input.close(); 
     jsonArray = new JSONArray(sb.toString()); 
    } catch (Exception e) { 
     Log.e("gagal postData", e.getMessage()); 
    } 
    return jsonArray; 
} 

}

,這是連接php文件到我的服務器

if ($aksi == "login"){ 
$a = mysql_query("select * from data_orangtua where email ='$email' and password = '$password'"); 
$jml = mysql_num_rows($a); 
if ($jml == 0){ 
    $data[] = NULL; 
}else{ 
    $data['login'] = array(); 
    while ($dt = mysql_fetch_array($a)) 
    { 
     $h['id_orangtua'] = $dt['id_orangtua'] ; 
     $h['nama']   = $dt['nama'] ; 
     $h['email']   = $dt['email'] ; 
     $h['password']  = $dt['password']; 
     array_push($data["login"], $h); 
    } 
    $data["status"] = "Anda Berhasil Login"; 
    $data['success']= '1'; 
} 

} 回聲json_encode($的數據);

有人請幫助我。 謝謝

回答

0

您致電new Masuk().execute()沒有參數。然後,你要在這裏檢查不存在的第一個參數:

@Override 
protected Void doInBackground(Object... arg0) { 
    if(arg0[0].equals("login")){ 
     output = "login"; 
     dologin(); 
    } 
    return null; 
} 

爲什麼不doLogin()?你已經確保你只有在有名字和密碼時才執行,那麼爲什麼還要做一次無用的檢查?

+0

哦,謝謝。你幫我。謝謝。 – riskywidiantoro