当JSON reply为空时,如何在Android中使函数循环

当JSON reply为空时,如何在Android中使函数循环,android,json,Android,Json,.我是Android新手,我正在使用教程了解更多信息。我正在尝试使用PHP和JSON在Android和远程服务器上创建一个登录页面。下面是我一直在尝试的登录功能。我的问题是,每当我输入错误的用户名和密码时(当然是有意的),当我下次使用正确的登录信息时,应用程序就会被强制关闭。我认为这是因为JSON在使用错误的登录信息时返回null。从那以后,我不知道如何处理空返回。我试着在looper和Async上阅读,但仍然没有成功 void login() { ArrayList<NameV

.我是Android新手,我正在使用教程了解更多信息。我正在尝试使用PHP和JSON在Android和远程服务器上创建一个登录页面。下面是我一直在尝试的登录功能。我的问题是,每当我输入错误的用户名和密码时(当然是有意的),当我下次使用正确的登录信息时,应用程序就会被强制关闭。我认为这是因为JSON在使用错误的登录信息时返回null。从那以后,我不知道如何处理空返回。我试着在looper和Async上阅读,但仍然没有成功

void login() {

    ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();

    postParameters.add(new BasicNameValuePair("username", EtUsernameInput.getText().toString()));
    postParameters.add(new BasicNameValuePair("password", EtPasswordInput.getText().toString()));
    String response = null;

    try {
        response = CustomHttpClient.executeHttpPost("http://xxx.xxx.xxx.xxx/xxx/xxx/activity1a.php",
                postParameters);
        String result = response.toString(); 

        try {
            returnString = "";
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++) {
                JSONObject json_data = jArray.getJSONObject(i);

                Log.i("log_tag","student_id: "+ json_data.getString("student_id") + ", first_login:  "+ json_data.getString("s_first_login"));

                String first_login = json_data.getString("s_first_login");                  
           }
        } catch(JSONException e) {
            Log.e("log_tag", "Error parsing data "+e.toString());
        }

        if (first_login.equals("") || first_login.equals(null)) {
            runOnUiThread(new Runnable() { 
                    @Override 
                    public void run() {
                        Toast.makeText(Activity1_Login.this, "User not found.", Toast.LENGTH_SHORT).show();
                    }
                });
         } else
            startActivity(new Intent(Activity1_Login.this, Activity2_Main.class));
    } catch (Exception e) {
        Log.e("log_tag","Error in http connection!!" + e.toString()); 
    }      
} 
void登录(){
ArrayList后参数=新的ArrayList();
添加(新的BasicNameValuePair(“用户名”,EtUsernameInput.getText().toString());
add(新的BasicNameValuePair(“password”,EtPasswordInput.getText().toString());
字符串响应=null;
试一试{
响应=CustomHttpClient.executeHttpPost(“http://xxx.xxx.xxx.xxx/xxx/xxx/activity1a.php",
后参数);
字符串结果=response.toString();
试一试{
returnString=“”;
JSONArray jArray=新JSONArray(结果);
对于(int i=0;i请看此:更改此行:

 if (first_login == "") 
用这个

 if (first_login.equals("")||first_login.equals(null))

使用android示例中可用的示例代码我看到代码中的错误,首先修复它们,
Log.i(“Log_标记”,“学生id:”+json_数据.getString(“学生id”)+”,first_登录:+json_数据.getString(“s_first_登录”);
Ok。我已将其更改为Log.i(“Log_标记”,“学生id:”+json_数据.GetLogin字符串(“学生id”)+”,first_登录:“+json_data.getString(“s_first_login”);希望它是正确的。是吗?我将代码更改为if(first_login.equals(“”| | | first_login.equals(null))Toast.makeText(Activity1_login.this,“未找到用户”),Toast.LENGTH_SHORT.show();但是,当我使用错误的登录信息时,它不会显示toast。你知道为什么吗?你在哪里调用你的login()方法?如果它在普通线程或后台,它就不会工作。我已经将它放在登录按钮的setOnClickListener中。代码如下:public void onClick(视图v){dialog=ProgressDialog.show(Activity1_Login.this,“,”验证用户…”,true);新线程(new Runnable(){public void run(){Login();}).start();}将您的toast放入runnuithread(new Runnable(){@Override public void run()){});因此我使用了以下代码:runOnUiThread(new Runnable(){@Override public void run(){Toast.makeText(Activity1_Login.this,“User not found.”,Toast.LENGTH_SHORT.show();});这是放在登录按钮的setOnClickListener中还是放在if语句中?这是我尝试的第一个示例之一,但无法使其工作。如果您有一个工作版本,请与我们分享。谢谢!