使用Android从服务器获取数据并加载新屏幕

使用Android从服务器获取数据并加载新屏幕,android,Android,我使用下面的代码从服务器获取数据,如果服务器的值是GEEK,那么它将加载到下一个类,但不会加载新视图。你能说什么问题吗 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); login = (Button) findViewById(R.id.login);

我使用下面的代码从服务器获取数据,如果服务器的值是
GEEK
,那么它将加载到下一个类,但不会加载新视图。你能说什么问题吗

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); login = (Button) findViewById(R.id.login); username = (EditText) findViewById(R.id.username); password = (EditText) findViewById(R.id.password); login.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String Re; String mUsername = username.getText().toString(); String mPassword = password.getText().toString(); Re=tryLogin(mUsername, mPassword); if(Re=="GEEK") { Intent i = new Intent(); i.setClassName(v.getContext(),"com.httplogin.MainScreen"); startActivity(i); } } }); } protected String tryLogin(String mUsername, String mPassword) { HttpURLConnection connection; OutputStreamWriter request = null; URL url = null; String response = null; String parameters = "username="+mUsername+"&password="+mPassword; try { url = new URL("http://serverspace/script.php"); connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestMethod("POST"); request = new OutputStreamWriter(connection.getOutputStream()); request.write(parameters); request.flush(); request.close(); String line = ""; InputStreamReader isr = new InputStreamReader(connection.getInputStream()); BufferedReader reader = new BufferedReader(isr); StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } // Response from server after login process will be stored in response variable. response = sb.toString(); isr.close(); reader.close(); } catch(IOException e) { Toast.makeText(this,e.toString(),0).show(); } return response; } } 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); login=(按钮)findviewbyd(R.id.login); 用户名=(EditText)findViewById(R.id.username); 密码=(EditText)findViewById(R.id.password); login.setOnClickListener(新的OnClickListener(){ @凌驾 公共void onClick(视图v){ 字符串Re; 字符串mUsername=username.getText().toString(); 字符串mPassword=password.getText().toString(); Re=tryLogin(博物馆名称,mPassword); 如果(Re==“极客”) { 意图i=新意图(); i、 setClassName(v.getContext(),“com.httplogin.MainScreen”); 星触觉(i); } } }); } 受保护的字符串tryLogin(字符串mUsername、字符串mPassword) { httpurl连接; OutputStreamWriter请求=null; URL=null; 字符串响应=null; 字符串参数=“username=“+mUsername+”&password=“+mPassword; 尝试 { url=新url(“http://serverspace/script.php"); connection=(HttpURLConnection)url.openConnection(); connection.setDoOutput(真); connection.setRequestProperty(“内容类型”、“应用程序/x-www-form-urlencoded”); connection.setRequestMethod(“POST”); 请求=新的OutputStreamWriter(connection.getOutputStream()); 请求。写入(参数); request.flush(); request.close(); 字符串行=”; InputStreamReader isr=新的InputStreamReader(connection.getInputStream()); BufferedReader读取器=新的BufferedReader(isr); StringBuilder sb=新的StringBuilder(); 而((line=reader.readLine())!=null) { sb.追加(第+行“\n”); } //登录过程后来自服务器的响应将存储在响应变量中。 response=sb.toString(); isr.close(); reader.close(); } 捕获(IOE异常) { Toast.makeText(这个,例如toString(),0.show(); } 返回响应; } }
它区分大小写吗?比较大小写不重要的字符串时,应使用.equalsIgnoreCase(),比较大小写重要的字符串时,应使用.equals()。您是否已经完成了此步骤并进行了调试,以确保
tryLogin(mUsername,mPassword)
返回了预期值?

关于您的代码,需要注意的一点是,您永远不应该从UI线程运行长时间操作,例如远程服务器访问(在您的情况下,tryLogin()调用)。这种编程将导致应用程序中的ANR。有关此主题的更多详细信息,请阅读

简单地说,与其从onCreate调用tryLogin,不如创建异步任务

new LoginTask().execute(mUsername, mPassword);
登录任务的定义如下:

private class LoginTask extends AsyncTask<string, void,="" String=""> {
     protected String doInBackground(String... login) {
         return tryLogin((login[0],login[1]);
     }

     protected void onPostExecute(String result) {
        if(result.equalsIgnoreCase("GEEK"))
        {
            Intent i = new Intent();
            i.setClassName(v.getContext(),"com.httplogin.MainScreen");
            startActivity(i);
        }
     }
 }
私有类登录任务扩展异步任务{
受保护的字符串doInBackground(字符串…登录){
返回tryLogin((登录名[0],登录名[1]);
}
受保护的void onPostExecute(字符串结果){
if(result.equalsIgnoreCase(“极客”))
{
意图i=新意图();
i、 setClassName(v.getContext(),“com.httplogin.MainScreen”);
星触觉(i);
}
}
}

参考此代码………..,使用修剪功能,因为它消除了字符串中的空格

public class HttpLogin extends Activity {
    /** Called when the activity is first created. */
    private Button login;
    private EditText username, password;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        login = (Button) findViewById(R.id.login);
        username = (EditText) findViewById(R.id.username);
        password = (EditText) findViewById(R.id.password);

        login.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
             String Re;
                String   mUsername = username.getText().toString();
                String  mPassword = password.getText().toString();

                Re=tryLogin(mUsername, mPassword);
                Log.d(" Check ","Here");
                Log.d("Re",Re);
                String temp_check=Re.trim();
                if(temp_check.equals("GEEK"))
                {
                    Intent i = new Intent();
                    i.setClassName(v.getContext(),"com.httplogin.MainScreen");
                    startActivity(i);

                }
                else
                {
                 //Toast.makeText(HttpLogin.this,"MAX Returned",0).show();
                 displayAlert(Re);
//                  Intent i = new Intent();
//                     i.setClassName(v.getContext(),"com.san.MainScreen");
//                     startActivity(i);
                }
            }
        });
    }

    protected String tryLogin(String mUsername, String mPassword)
    {           
      Log.d(" TryLoginCheck ","Here");
        HttpURLConnection connection;
       OutputStreamWriter request = null;

            URL url = null;   
            String response = null;   
            String temp=null;
            String parameters = "username="+mUsername+"&password="+mPassword;   
            System.out.println("UserName"+mUsername+"\n"+"password"+mPassword);
            Log.d("Parameters",parameters);
            try
            {

                url = new URL("http://serverspace/script.php");
                connection = (HttpURLConnection) url.openConnection();
                connection.setDoOutput(true);
                connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                connection.setRequestMethod("POST");    

                request = new OutputStreamWriter(connection.getOutputStream());
                request.write(parameters);
                request.flush();
                request.close();            
                String line = "";               
                InputStreamReader isr = new InputStreamReader(connection.getInputStream());
                BufferedReader reader = new BufferedReader(isr);
                StringBuilder sb = new StringBuilder();
                while ((line = reader.readLine()) != null)
                {

                    sb.append(line + "\n");
                }
                temp=sb.toString();
                Log.d("Temp",temp);
                // Response from server after login process will be stored in response variable.                
                response = sb.toString();
                Log.d("Response",response);
               Log.d("Sb Value",sb.toString());
                isr.close();
                reader.close();


            }
            catch(IOException e)
            {
                Toast.makeText(this,e.toString(),0).show();
            }
           // Log.d("Response",response);
            return response;
    }
    public  void displayAlert(String Re)
    {
     new AlertDialog.Builder(this).setMessage(Re)
        .setTitle("Returned Value")  
        .setCancelable(true)  
        .setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {  
           public void onClick(DialogInterface dialog, int whichButton){
            finish();
           }  
           })  
        .show(); 
    }
}

如果(Re.equals(“GEEK”){…}在这里阅读更多->参见我在上面的答案中添加的示例。