时间戳转换器

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

日期:2023-02-22     浏览:240    
【中文标题】从服务器获取数据并使用 Android 加载新屏幕【英文标题】:Getting data from the server and loading new screen using Android 【发布时间】:2011-05-28 02:44:59 【问题描述】:

我正在使用以下代码从服务器获取数据,如果来自服务器的值为GEEK,那么它将加载到下一个类,但未加载新视图。能说说是什么问题吗?

公共无效 onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); 设置内容视图(R.layout.main); login = (Button) findViewById(R.id.login); 用户名 = (EditText) findViewById(R.id.username); 密码 = (EditText) findViewById(R.id.password); login.setOnClickListener(new OnClickListener() @覆盖 公共无效 onClick(查看 v) 字符串重新; 字符串 mUsername = username.getText().toString(); 字符串 mPassword = password.getText().toString(); Re=tryLogin(mUsername, mPassword); 如果(重新==“极客”) 意图 i = new Intent(); i.setClassName(v.getContext(),"com.httplogin.MainScreen"); 开始活动(一); ); protected String tryLogin(String mUsername, String mPassword) HttpURLConnection 连接; OutputStreamWriter 请求 = null; 网址网址 = 空; 字符串响应 = null; 字符串参数 = "username="+mUsername+"&password="+mPassword; 尝试 url = 新 URL("http://serverspace/script.php"); 连接 = (HttpURLConnection) url.openConnection(); 连接.setDoOutput(true); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestMethod("POST"); request = new OutputStreamWriter(connection.getOutputStream()); request.write(参数); 请求.flush(); 请求.close(); 字符串行 = ""; InputStreamReader isr = new InputStreamReader(connection.getInputStream()); BufferedReader reader = new BufferedReader(isr); StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) sb.append(line + "\n"); // 登录过程后来自服务器的响应将存储在响应变量中。 响应 = sb.toString(); isr.close(); reader.close(); 捕获(IOException e) Toast.makeText(this,e.toString(),0).show(); 返回响应;

【问题讨论】:

【参考方案1】:

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

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(); 
    

【讨论】:

【参考方案2】:

区分大小写吗?在比较大小写无关紧要的字符串时,您应该使用 .equalsIgnoreCase() ,而在比较大小写时应该使用 .equals() 。您是否也已逐步完成并调试以确保 tryLogin(mUsername, mPassword) 返回预期值?

【讨论】:

if(Re.equals("GEEK"))... 在这里阅读更多-> developer.android.com/reference/java/lang/String.html【参考方案3】:

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

简单地说,不是从 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);
        
     
 

【讨论】:

见我上面在我的回答中添加的例子。

相关文章

Flutter 在使用 StreamBuilder 从 firebase 加载数据之前显示红色错误屏幕,如何解决?

{...布时间】:2020-02-1106:33:10【问题描述】:我正在从firebase获取数据并使用该数据制作卡片。显示用户的某些数据从数据库中,}

Flutter:如何在加载页面之前从 Api 获取数据 [关闭]

{】Flutter:如何在加载页面之前从Api获取数据[关闭]【英文标题】:Flutter:HowtogetdatafromApibeforeloadingpage[closed]【发布时间】:2021-01-2411:41:41【问题描述】:我试图从Api获取数据以显示在屏幕上,因此我创建了一个函数并从小部件构...}

从 Firebase 获取数据时如何显示加载屏幕

{】从Firebase获取数据时如何显示加载屏幕【英文标题】:Howtoshowaloadingscreenwhilewefetchdatafromfirebase【发布时间】:2022-01-1516:03:35【问题描述】:在这里,我想在我们从firebase获取数据时显示spinkit或任何一些文本。现在我在登录时没...}

Sencha Touch 同步并从服务器获取新数据

{】SenchaTouch同步并从服务器获取新数据【英文标题】:SenchaTouchSyncandGetNewDatafromServer【发布时间】:2012-03-0709:30:54【问题描述】:我的应用是需要完成的待办事项列表。打开应用程序后,它会转到服务器并(从数据库)收集要完...}

从android应用程序获取数据并使用php将其存储在sql数据库中

{...想从我的android应用程序中获取数据并放入phpmyadmin(wampp服务器)中的sql数据库。这是我的代码:packagecom.example.sara.myapplicat}

从 Qt 快速控制 2 加载下一个屏幕/应用程序窗口

{...【问题描述】:我对Qt快速控制2开发非常陌生。我正在为android开发一个跨平台应用程序。我正在从C++代码加载新屏幕,如下所示intmain(intargc,char*argv[])QApplicationapp(ar}

从通知中获取 url 并加载到 Fragment 的 webview 的最佳方法?

{...刚接触Android,我正在制作一个应用程序,它可以发送从服务器发送的实时通知。现在我希望用户单击通知时会在我的web视图中打开一个网页。它是一个基于}

从 mongoDB 获取数据并使用 Angular 和 NodeJs 在屏幕上打印

{】从mongoDB获取数据并使用Angular和NodeJs在屏幕上打印【英文标题】:GetdatafrommongoDBandprintonscreenusingAngularandNodeJs【发布时间】:2017-11-2206:18:51【问题描述】:我有一个使用MongoDB、Angular和NodeJs的小项目。注册或登录成功后,我的应...}

使用php从mysql获取数据到android

{...5:19:25【问题描述】:我目前正在尝试开发一个可以从mysql服务器发送和接收数据的应用程序。应用程序调用一个php脚本来连接到mysql服务器。我已经成功开发了发送部分,现在我想从mysql中检索数据并显示在android手机上。mysql表...}

如何让 vuefire 显示加载屏幕?

{...【问题描述】:作为标题Vuefire可以自动从firebase数据库中获取数据,但它需要一些加载时间。所以我想在获取数据之前显示一些css动画,当它成功时我可以观看任何事件【问题讨论】:如果检查数据v-show,请尝试使用vue-spinner【...}

Copyright ©2021 时间戳转换器 小常识 114pp | 陕ICP备18005036号