2012-05-09 6 views
5

私のアプリケーションについて教えてください ウェブサイトJSON url(Drupalウェブサイト)からデータを取得しています。データはJSON形式です。 私のアプリケーションのログイン機能は完全に機能します。 &ユーザーがサーバー上で検証されます。 また、私のアンドロイドアプリケーションに表示されているサーバ&から他のデータ(JSON URL)を取得しています。 問題は、ログインが必要なページのJSONデータにアクセスできないことです。ログインがAndroidアプリケーション全体で維持されていないためです。アンドロイドネイティブアプリケーション全体のサーバーログインを維持する方法は?

私はstackoverflowの& Googleで検索しました私は、&が試したこれらのリンクを得たが、私のコードでそれらを使用する方法がわからない。ここで http://hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html

Android session management

Http cookie store in Android

ログインせずにdrupalサイトからの空のJSONです。 コンピュータウェブブラウザに -

{ 
    "nodes": [] 
} 

はここでサイトのページhttp://www.mywebsite.com/myaccount-pageをリロードログイン(http://www.mywebsite.com/user/login)後のdrupalの部位特異的からJSON &です。コンピュータのウェブブラウザが自動的にログインセッションを維持することを意味する。

{ 
"nodes": [ 
    { 
     "node": { 
      "Uid": "51", 
      "Username": "anand", 
      "Name": "anand", 
      "Address": "\n\tAt- vadodara Nr. Kareli Baugh", 
      "Date of Birth": "1998-08-20", 
      "Occupation": "student", 
      "Member Since": "36 weeks 6 days" 
     } 
    } 
] 
} 

しかし、アンドロイドアプリケーションでは、これを自動的に行いません。 このセッションをAndroidで管理して、Androidのアプリケーションにログインできるようにしたいのですが、ログイン後に別のページアクティビティにリダイレクト& JSONデータを取得します。ここで は私のコードです:util.javaこのコードで今すぐ

util.java

public static String makeWebCall(String url, String uname,String pass) 
{ 
    DefaultHttpClient client = new DefaultHttpClient(); 

    HttpPost post = new HttpPost(url); 

    List<NameValuePair> params = new ArrayList<NameValuePair>(); 

    params.add(new BasicNameValuePair("username",uname)); 
     params.add(new BasicNameValuePair("password",pass)); 

    UrlEncodedFormEntity formEntity = null; 
    try { 
     formEntity = new UrlEncodedFormEntity(params); 
    } catch (UnsupportedEncodingException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    post.setEntity(formEntity); 

    try { 
     //post.setEntity(new StringEntity(requestString)); 

     HttpResponse response = client.execute(post); 
     System.out.println("=========> Responsehello => "+response); 
     int statusCode = response.getStatusLine().getStatusCode(); 

     if (statusCode == HttpStatus.SC_OK) 
     { 
      HttpEntity entity = response.getEntity(); 
      InputStream is = entity.getContent(); 
      return iStream_to_String(is); 
     } 
     else 
     { 
      return "Hello This is status ==> :"+String.valueOf(statusCode); 
     } 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return null; 
} 

LoginActivity.java

 public void onClick(View v) { 


      String uName = editUser.getText().toString(); 
      String Password = editPass.getText().toString(); 

      if(uName.equals("") | Password.equals("")) 
      { 
       Toast.makeText(getApplicationContext(), "Enter the Username and Password",Toast.LENGTH_SHORT).show(); 
      } 
      else{ 


            String strResponse = util.makeWebCall(loginURL,uName,Password); 
       System.out.println("=========> Response from login page=> " + strResponse); 


       try{ 
        if (strResponse.substring(KEY_SUCCESS) != null) { 
         txterror.setText(""); 



         Intent inlogin = new Intent(LoginActivity.this, 
           post_myprofile.class); 
         inlogin.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         startActivity(inlogin); 

         //finish(); 
        } 
        else 
        { 
         txterror.setText("Username and Password Not valid !!!"); 
        } 
       } 
       catch (Exception e) { 
        // TODO: handle exception 
       } 





      } 


     } 
    }); 

    btngotoregister.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Intent intent1 = new Intent(getApplicationContext(), 
        RegisterActivity.class); 
      // intent.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(intent1); 

     } 
    }); 
} 
} 

makeWebCall方法ログインは成功しました&サーバーからJSON応答を詳細に取得しました。 & page-activityは、ユーザープロフィールの2ページ目にリダイレクトされます。 オン2ページ私はuserprofile JSONデータを取得していません - 上記のように、セッションが維持されていないため空のJSONが表示されています。

ここは、2番目のページ活動のコードです。

post_myprofile。util.javaにプロファイル用のJava

protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 

     String url = "http://www.cheerfoolz.com/myaccount-page"; 
     String strResponse = util.makeWebCall(url); 

     try { 
      JSONObject objResponse = new JSONObject(strResponse); 

      JSONArray jsonnodes = objResponse 
         .getJSONArray(API.cheerfoolz_myprofile.NODES); 

makewebcall方法

util.java

public static String makeWebCall(String url) { 

    DefaultHttpClient client = new DefaultHttpClient(); 

    HttpGet httpRequest = new HttpGet(url); 
    // HttpPost post = new HttpPost(url); 

    try { 

     HttpResponse httpResponse = client.execute(httpRequest); 

     final int statusCode = httpResponse.getStatusLine().getStatusCode(); 

     if (statusCode != HttpStatus.SC_OK) { 
      /* Log.i(getClass().getSimpleName(), 
       "Error => " + statusCode + " => for URL " + url);*/ 
      return null; 
     } 

     HttpEntity entity = httpResponse.getEntity(); 
      InputStream is = entity.getContent(); 
      return iStream_to_String(is); 
    } 
    catch (IOException e) { 
     httpRequest.abort(); 
     // Log.w(getClass().getSimpleName(), "Error for URL =>" + url, e); 
    } 

    return null; 

} 


public static String iStream_to_String(InputStream is1) 
{ 
    BufferedReader rd = new BufferedReader(new InputStreamReader(is1), 4096); 
    String line; 
    StringBuilder sb = new StringBuilder(); 
    try { 
     while ((line = rd.readLine()) != null) { 
       sb.append(line); 
     } 
     rd.close(); 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    String contentOfMyInputStream = sb.toString(); 
    return contentOfMyInputStream; 
} 


} 

私は、このページにここに空白のJSONを取得しています - 私は上記されていること。どのようにこのユーザープロファイル活動のセッションを維持する&データを取得する?

ありがとうございます。

答えて

3

最終的に私のためにその作業:)

代わりに新しいDefaultHttpClientすべての時間を使用してのは、私はそれが静的&一度だけ使用されてきました。

static DefaultHttpClient client = new DefaultHttpClient(); 
+0

これは大きな助けであった...ありがとうございました:) – Dave

0
package com.velmurugan.vazbo_new.utility; 
import android.webkit.CookieManager; 
import android.webkit.CookieSyncManager; 
import org.apache.http.Header; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpException; 
import org.apache.http.HttpRequest; 
import org.apache.http.HttpRequestInterceptor; 
import org.apache.http.HttpResponse; 
import org.apache.http.HttpResponseInterceptor; 
import org.apache.http.HttpStatus; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.cookie.Cookie; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.impl.client.HttpClients; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.protocol.HttpContext; 
import java.io.*; 
import java.util.ArrayList; 
import java.util.List; 
/** 
* Created by [email protected] on 11/1/2015. 
*/ 
public class SessionParser { 
    public SessionParser(){ 
    } 
    public static String makeWebCall(String url,List<NameValuePair> params ) 
    { 
     CommonClass.httpClient = new DefaultHttpClient(); 
     HttpPost post = new HttpPost(url); 
     UrlEncodedFormEntity formEntity = null; 
     try { 
      formEntity = new UrlEncodedFormEntity(params); 
     } catch (UnsupportedEncodingException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     post.setEntity(formEntity); 
     try { 
      HttpResponse response = CommonClass.httpClient.execute(post); 
      System.out.println("=========> Responsehello => "+response); 
      int statusCode = response.getStatusLine().getStatusCode(); 
      if (statusCode == HttpStatus.SC_OK) 
      { 
       HttpEntity entity = response.getEntity(); 
       InputStream is = entity.getContent(); 
       return iStream_to_String(is); 
      } 
      else 
      { 
       return "Hello This is status ==> :"+String.valueOf(statusCode); 
      } 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 
    public static String makeWebCall(String url) { 
     System.out.println("=========> Response url => "+url); 
     HttpGet httpRequest = new HttpGet(url); 
     try { 
      HttpResponse httpResponse = CommonClass.httpClient.execute(httpRequest); 
      final int statusCode = httpResponse.getStatusLine().getStatusCode(); 
      if (statusCode != HttpStatus.SC_OK) { 
      /* Log.i(getClass().getSimpleName(), 
       "Error => " + statusCode + " => for URL " + url);*/ 
       return null; 
      } 
      HttpEntity entity = httpResponse.getEntity(); 
      InputStream is = entity.getContent(); 
      return iStream_to_String(is); 
     } 
     catch (IOException e) { 
      httpRequest.abort(); 
      // Log.w(getClass().getSimpleName(), "Error for URL =>" + url, e); 
     } 
     return null; 
    } 
    public static String iStream_to_String(InputStream is1) 
    { 
     BufferedReader rd = new BufferedReader(new InputStreamReader(is1), 4096); 
     String line; 
     StringBuilder sb = new StringBuilder(); 
     try { 
      while ((line = rd.readLine()) != null) { 
       sb.append(line); 
      } 
      rd.close(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     String contentOfMyInputStream = sb.toString(); 
     return contentOfMyInputStream; 
    } 
} 
関連する問題