让我来描述我的申请, 我从网站JSON url(Drupal网站)获取数据,数据是JSON格式。 在我的应用程序登录功能完美。 &安培;用户在服务器上验证。 我也从服务器&获取其他数据(JSON url)。在我的Android应用程序中显示 现在,问题是我无法访问需要登录的页面的JSON数据,因为我的登录不是在整个Android应用程序中维护。
我搜索了stackoverflow&谷歌我得到了这些链接&尝试但不知道如何在我的代码中使用它们: http://hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html
以下是来自drupal网站的空JSON,无需登录。
{
"nodes": []
}
以下是来自drupal网站的JSON-登录后的 (http://www.mywebsite.com/user/login)&在计算机webbrowser 中重新加载网站上的http://www.mywebsite.com/myaccount-page页面。表示计算机网络浏览器自动维护登录会话。
{
"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中维护这个会话,这样我就可以登录到android应用程序,登录后重定向到另一个页面活动&在那里获取JSON数据。 这是我的代码:
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);
}
});
}
}
util.java中的makeWebCall方法
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;
}
现在使用此代码登录成功&amp;我从服务器获得了详细的JSON响应。 &安培; page-activity重定向到用户个人资料的第2页。 在第二页上,我没有得到userprofile JSON数据 - 如上所述,我得到了空白JSON,因为没有维护会话。
以下是第二页活动的代码。
post_myprofile.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);
util.java中的配置文件的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 - 我在上面已经提到了。那么如何在此用户个人资料活动中维护会话&amp;获取数据?
感谢收听。
答案 0 :(得分:3)
终于为我工作了:)
而不是一直使用新的 DefaultHttpClient ,我已将其设为静态&amp;只用过一次。
static DefaultHttpClient client = new DefaultHttpClient();
答案 1 :(得分: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 velsans@gmail.com 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;
}
}