我正在尝试在 android 中开发登录模块,因为我在服务器端创建了表并返回返回用户 ID、用户名和密码的 json 响应。我使用 Asynctask 连接到 url 并在 doInBackground() 中从服务器读取数据。当我运行程序它显示登录不成功消息。我不知道为什么它显示。我做了很多研发,但我没有得到解决方案。这是我的完整源代码
package com.example.tours;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
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.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class login extends Activity implements OnClickListener
{
Button btnback,btnlog;
EditText e1,e2;
List<NameValuePair>nameValuePairs;
ProgressDialog progressdialog;
InputStream is=null;
JSONObject jsonobject=null;
String Json="";
String oneObjectsItem="";
String oneObjectsItem2="";
String oneObjectsItem3="";
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
e1=(EditText)findViewById(R.id.editTextuser);
e2=(EditText)findViewById(R.id.editTextpass);
btnback=(Button)findViewById(R.id.btnback);
btnlog=(Button)findViewById(R.id.btnlogin);
btnback.setOnClickListener(this);
btnlog.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.btnback:Intent i=new Intent(login.this,MainActivity.class);
startActivity(i);
break;
case R.id.btnlogin:// check username and pass so point to php file and build param
new CallAsyncTask().execute();
}
}
public class CallAsyncTask extends AsyncTask<String,String,String>
{
@Override
protected String doInBackground(String... arg0)
{
// TODO Auto-generated method stub
// code for checking user name and password
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://deepakg0.0fees.net/login.php");
// Build The parameter
nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("UserName",e1.getText().toString()));
nameValuePairs.add(new BasicNameValuePair("UserPass",e2.getText().toString()));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// generate responce
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
}
catch(Exception e1)
{
Toast.makeText(getBaseContext(), "Errror"+e1.toString(), Toast.LENGTH_LONG).show();
}
//read the responce into string
try
{
BufferedReader reader=new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder builder=new StringBuilder();
String line=null;
while((line=reader.readLine())!=null)
{
builder.append(line+"\n");
}
is.close();
Json=builder.toString();
}
catch(Exception e2 )
{
Log.d("Buffer","failed"+e2.toString());
}
// create the json object
try
{
jsonobject = new JSONObject(Json);
JSONArray jArray = jsonobject.getJSONArray("result");
// iterate through the array and fetch the keys
for(int i=0;i<jArray.length();i++)
{
// fetch the object and their keys
JSONObject oneObject = jArray.getJSONObject(i);
// Pulling items from the array
oneObjectsItem = oneObject.getString("uid");
oneObjectsItem2 = oneObject.getString("username");
oneObjectsItem3 = oneObject.getString("password");
}
}
catch(Exception e3)
{
Log.d("InJson","error"+e3.toString());
}
if((e1.getText().toString().equalsIgnoreCase(oneObjectsItem2)&&(e1.getText().toString().equalsIgnoreCase(oneObjectsItem2))))
{
Toast.makeText(getApplicationContext(),"Login Successfull",Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(getApplicationContext(),"Login Unsuccessfull",Toast.LENGTH_LONG).show();
}
return null;
}
@Override
protected void onPostExecute(String result)
{
// TODO Auto-generated method stub
super.onPostExecute(result);
Toast.makeText(getApplicationContext(),"Output"+Json,Toast.LENGTH_LONG).show();
progressdialog.dismiss();
}
@Override
protected void onPreExecute()
{
// TODO Auto-generated method stub
super.onPreExecute();
progressdialog=new ProgressDialog(login.this);
progressdialog.setMessage("Checking username and password please wait");
//progressdialog.setIndeterminate(false);
//progressdialog.setCancelable(false);
progressdialog.show();
}
}
}
这是我的日志猫
09-11 18:33:50.809: E/AndroidRuntime(985): FATAL EXCEPTION: AsyncTask #1
09-11 18:33:50.809: E/AndroidRuntime(985): java.lang.RuntimeException: An error occured while executing doInBackground()
09-11 18:33:50.809: E/AndroidRuntime(985): at android.os.AsyncTask$3.done(AsyncTask.java:200)
09-11 18:33:50.809: E/AndroidRuntime(985): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
09-11 18:33:50.809: E/AndroidRuntime(985): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
09-11 18:33:50.809: E/AndroidRuntime(985): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
09-11 18:33:50.809: E/AndroidRuntime(985): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-11 18:33:50.809: E/AndroidRuntime(985): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
09-11 18:33:50.809: E/AndroidRuntime(985): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
09-11 18:33:50.809: E/AndroidRuntime(985): at java.lang.Thread.run(Thread.java:1096)
09-11 18:33:50.809: E/AndroidRuntime(985): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
09-11 18:33:50.809: E/AndroidRuntime(985): at android.os.Handler.<init>(Handler.java:121)
09-11 18:33:50.809: E/AndroidRuntime(985): at android.widget.Toast.<init>(Toast.java:68)
09-11 18:33:50.809: E/AndroidRuntime(985): at android.widget.Toast.makeText(Toast.java:231)
09-11 18:33:50.809: E/AndroidRuntime(985): at com.example.tours.login$CallAsyncTask.doInBackground(login.java:143)
09-11 18:33:50.809: E/AndroidRuntime(985): at com.example.tours.login$CallAsyncTask.doInBackground(login.java:1)
09-11 18:33:50.809: E/AndroidRuntime(985): at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-11 18:33:50.809: E/AndroidRuntime(985): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-11 18:33:50.809: E/AndroidRuntime(985): ... 4 more
09-11 18:33:51.939: E/WindowManager(985): Activity com.example.tours.login has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44ea9be0 that was originally added here
09-11 18:33:51.939: E/WindowManager(985): android.view.WindowLeaked: Activity com.example.tours.login has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44ea9be0 that was originally added here
09-11 18:33:51.939: E/WindowManager(985): at android.view.ViewRoot.<init>(ViewRoot.java:247)
09-11 18:33:51.939: E/WindowManager(985): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
09-11 18:33:51.939: E/WindowManager(985): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
09-11 18:33:51.939: E/WindowManager(985): at android.view.Window$LocalWindowManager.addView(Window.java:424)
09-11 18:33:51.939: E/WindowManager(985): at android.app.Dialog.show(Dialog.java:241)
09-11 18:33:51.939: E/WindowManager(985): at com.example.tours.login$CallAsyncTask.onPreExecute(login.java:175)
09-11 18:33:51.939: E/WindowManager(985): at android.os.AsyncTask.execute(AsyncTask.java:391)
09-11 18:33:51.939: E/WindowManager(985): at com.example.tours.login.onClick(login.java:73)
09-11 18:33:51.939: E/WindowManager(985): at android.view.View.performClick(View.java:2408)
09-11 18:33:51.939: E/WindowManager(985): at android.view.View$PerformClick.run(View.java:8816)
09-11 18:33:51.939: E/WindowManager(985): at android.os.Handler.handleCallback(Handler.java:587)
09-11 18:33:51.939: E/WindowManager(985): at android.os.Handler.dispatchMessage(Handler.java:92)
09-11 18:33:51.939: E/WindowManager(985): at android.os.Looper.loop(Looper.java:123)
09-11 18:33:51.939: E/WindowManager(985): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-11 18:33:51.939: E/WindowManager(985): at java.lang.reflect.Method.invokeNative(Native Method)
09-11 18:33:51.939: E/WindowManager(985): at java.lang.reflect.Method.invoke(Method.java:521)
09-11 18:33:51.939: E/WindowManager(985): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-11 18:33:51.939: E/WindowManager(985): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-11 18:33:51.939: E/WindowManager(985): at dalvik.system.NativeStart.main(Native Method)
09-11 18:37:28.179: D/dalvikvm(1068): GC_FOR_MALLOC freed 3655 objects / 178624 bytes in 102ms
09-11 18:37:30.439: D/Buffer(1068): failedjava.lang.NullPointerException
09-11 18:37:30.449: D/InJson(1068): errororg.json.JSONException: End of input at character 0 of
09-11 18:40:14.559: D/dalvikvm(1095): GC_FOR_MALLOC freed 3809 objects / 182976 bytes in 96ms
09-11 18:40:16.769: D/Buffer(1095): failedjava.lang.NullPointerException
09-11 18:40:16.769: D/InJson(1095): errororg.json.JSONException: End of input at character 0 of
09-11 18:45:17.069: D/Buffer(1095): failedjava.lang.NullPointerException
09-11 18:45:17.069: D/InJson(1095): errororg.json.JSONException: End of input at character 0 of
09-11 19:07:09.619: D/dalvikvm(1095): GC_FOR_MALLOC freed 5200 objects / 195696 bytes in 98ms
09-11 19:07:09.840: D/dalvikvm(1095): GC_FOR_MALLOC freed 881 objects / 411168 bytes in 167ms
09-11 19:07:12.139: D/Buffer(1095): failedjava.lang.NullPointerException
09-11 19:07:12.139: D/InJson(1095): errororg.json.JSONException: End of input at character 0 of
09-11 19:07:12.219: D/Buffer(1095): failedjava.lang.NullPointerException
09-11 19:07:12.219: D/InJson(1095): errororg.json.JSONException: End of input at character 0 of