2016-01-11 60 views
1

我是新来的android,来自iOS我对Java及其所有功能了解不多。我正在尝试构建一个应用程序,用户需要在启动时进行登录。我用我使用一个专用的API,如: https://apiUrl.com/login?login=login&password=password 它返回我JSON对象:使用Android异步处理成功请求返回Http

{ 
token: "qqdpo9i7qo3m8lldksin6cq714" 
} 

所以我在做什么在我的代码很简单:

MainActivity.java:

Button button = (Button) findViewById(R.id.loginButton); 

     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       String login = (String) ((EditText) findViewById (R.id.userName)).getText().toString(); 
       String password = (String) ((EditText) findViewById (R.id.password)).getText().toString(); 

       if (login != "" && password != "") 
       { 
        HashMap<String, String> postElements = new HashMap<String, String>(); 
        postElements.put("login", login); 
        try { 
         postElements.put("password", URLEncoder.encode(password, "utf-8")); 
        } catch (UnsupportedEncodingException e) { 
         e.printStackTrace(); 
        } 
        Button button = (Button) findViewById(R.id.loginButton); 
        button.setText("Login in ..."); 

        String queryLogin = "https://apiUrl.com/login?"; 

        String urlString = ""; 
        try { 
         urlString = "login="; 
         urlString += URLEncoder.encode(login, "UTF-8"); 
         urlString += "&password="; 
         urlString += URLEncoder.encode(password, "UTF-8"); 
        } catch (UnsupportedEncodingException e) { 

         // if this fails for some reason, let the user know why 
         e.printStackTrace(); 
         Toast.makeText(getApplicationContext(), "Error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
        } 

        apiQuery.loginQuery(queryLogin, urlString); 
} 

apiQuery是类型APIQuery的:

public void loginQuery(String url, String urlString) { 

    // Prepare your search string to be put in a URL 
    // It might have reserved characters or something 
    // Create a client to perform networking 
    AsyncHttpClient client = new AsyncHttpClient(); 

    // Have the client get a JSONArray of data 
    // and define how to respond 
    client.get(url + urlString, 
     new JsonHttpResponseHandler() { 
       @Override 
       public void onSuccess(JSONObject jsonObject) { 
        String token = ""; 

        if (jsonObject.has("token")) { 
        /*Toast.makeText(_mainContext, "Login Success!", Toast.LENGTH_LONG).show();*/ 
        token = jsonObject.optString("token"); 
        // 8. For now, just log results 
        Log.d("APIQuery Success", jsonObject.toString()); 
        } 
       } 

       @Override 
       public void onFailure(int statusCode, Throwable throwable, JSONObject error) { 
        // Display a "Toast" message 
        // to announce the failure 
        Toast.makeText(_mainContext, "Error: " + statusCode + " " + throwable.getMessage(), Toast.LENGTH_LONG).show(); 

         // Log error message 
         // to help solve any problems 
         Log.e("APIQuery Failure", statusCode + " " + throwable.getMessage()); 
       } 
     }); 
    } 

我的实现工作正常,我有一个ToastMessage屏幕上显示“登录成功”(或“登录错误”当它失败当然)

但我不知道如何处理该成功,以便传递给我创建的其他活动。

我愿做这样的事情:

if (apiQuery.loginQuery(...)) 
    show(activityLogged); // Where activityLogged is another activity 

UPDATE

我添加这些行:

if (jsonObject.has("token")) 
{ 
    /*Toast.makeText(_mainContext, "Login Success!",  Toast.LENGTH_LONG).show();*/ 
    token = jsonObject.optString("token"); 
    // 8. For now, just log results 
    Log.d("APIQuery Success", jsonObject.toString()); 
    Intent i = new Intent(_mainContext, MainActivityLogged.class); 
    _mainContext.startActivity(i); 
} 

我的清单文件看起来像:

  <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <!-- ATTENTION: This data URL was auto-generated. We recommend that you use the HTTP scheme. 
       TODO: Change the host or pathPrefix as necessary. --> 
      <data 
       android:host="epidroid.charvoz.example.com" 
       android:pathPrefix="/mainactivitylogged" 
       android:scheme="http" /> 
     </intent-filters> 
+0

你应该阅读:http://developer.android.com/training/basics/firstapp/starting-activity.html – pedromss

回答

1

你可以简单地写一个Intent移动到下一个活动你的onSuccess回调

@Override 
       public void onSuccess(JSONObject jsonObject) { 
        String token = ""; 

        if (jsonObject.has("token")) { 
        /*Toast.makeText(_mainContext, "Login Success!", Toast.LENGTH_LONG).show();*/ 
        token = jsonObject.optString("token"); 
        Intent i = new Intent(context,LoggedActivity.class); 
        context.startActivity(i); 
        } 
       } 

里面在上面的代码

Intent i = new Intent(context,LoggedActivity.class); 
        startActivity(i); 

这是用于导航到下一page.Also请确保您在清单文件中声明活动。

+0

我不得不修改一下,它没有编译,“Intent i = new Intent(_mainContext ,MainActivityLogged.class); _mainContext.startActivity(i);'。但是,当我点击日志按钮应用程序退出.. –

+0

看到我的编辑:)! –

+0

你有意向过滤器添加到新的活动?它不需要 –

0

您也可以通过意图传递一些数据到下一个活动,像这样:

@Override 
public void onSuccess(JSONObject jsonObject) { 
    String token = ""; 
    if (jsonObject.has("token")) { 
     /*Toast.makeText(_mainContext, "Login Success!", Toast.LENGTH_LONG).show();*/ 
     token = jsonObject.optString("token"); 
     Intent i = new Intent(context,LoggedActivity.class); 
     i.putExtra("token", token); 
     startActivity(i); 
    } 
} 

再检索下一个活动的令牌(中的onCreate()内),像这样:

String token = getIntent().getStringExtra("token");