2014-11-22 95 views
0
//Below is the entire class from which i'm trying to start an activity from 


public class SimpleHttpClient extends Activity { 

    public static final int HTTP_TIMEOUT = 30 * 1000; 

private static HttpClient mHttpClient; 


private static HttpClient getHttpClient() { 
    if (mHttpClient == null) { 
     mHttpClient = new DefaultHttpClient(); 
     final HttpParams params = mHttpClient.getParams(); 
     HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT); 
     HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT); 
     ConnManagerParams.setTimeout(params, HTTP_TIMEOUT); 
    } 
    return mHttpClient; 
} 

public static String executeHttpPost(String url, ArrayList<NameValuePair> postParameters) throws Exception { 
    BufferedReader in = null; 
    try { 
     HttpClient client = getHttpClient(); 
     HttpPost request = new HttpPost(url); 
     UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters); 
     request.setEntity(formEntity); 
     HttpResponse response = client.execute(request); 
     in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 

     StringBuffer sb = new StringBuffer(""); 
     String line = ""; 
     String NL = System.getProperty("line.separator"); 
     while ((line = in.readLine()) != null) { 
      sb.append(line + NL); 
     } 
     in.close(); 

     String result = sb.toString(); 
     String disabled = "Disabled"; 
     if (result.length() == 2) 
     { 
      return "Disabled"; 
     } 
     else if (result.length() == 3) 
     { 


     // return "Logged In"; 
      Intent i = new Intent(this, MainActivity.class); 
      startActivity(i); 
     //it tells me i cannot reference from a static context 
     } 
     else if (result.length() == 5) 
     { 
      return "Unknown"; 
     } 
     else if (result.length() == 4) 
     { 
      return "Incorrect Login Details"; 
     } 
     else { 
      return result+"Unknown"+result.length(); 
     } 
    } 

    finally { 
     if (in != null) { 
      try { 
       in.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 



public static String executeHttpGet(String url) throws Exception { 
    BufferedReader in = null; 
    try { 
     HttpClient client = getHttpClient(); 
     HttpGet request = new HttpGet(); 
     request.setURI(new URI(url)); 
     HttpResponse response = client.execute(request); 
     in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 

     StringBuffer sb = new StringBuffer(""); 
     String line = ""; 
     String NL = System.getProperty("line.separator"); 
     while ((line = in.readLine()) != null) { 
      sb.append(line + NL); 
     } 
     in.close(); 

     String result = sb.toString(); 
     return result; 
    } 
    finally { 
     if (in != null) { 
      try { 
       in.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
} 

回答

0

startActivity是Activity類非靜態方法,你正試圖從靜態方法,這就是爲什麼編譯器不開心調用它。您可以參考api簽名here

因此,無論從getHttpClient,executeHttpPost方法和從mHttpClient字段中刪除static關鍵字,它應該向前移動。

或者你可以使用上下文來調用startActivity這樣的:

context.startActivity(i); 

又通方面同時創造意圖,而不是此引用。

0

您應該通過上下文的靜態方法:

public static String executeHttpPost(Context context, String url, ArrayList<NameValuePair> postParameters) throws Exception { 
    ... 
    // return "Logged In"; 
    Intent i = new Intent(context, MainActivity.class); 
    context.startActivity(i); 
    ... 
} 
0

您需要提供一個Context發動Intent。在你的情況應該改變:

Intent i = new Intent(this, MainActivity.class); 
startActivity(i); 

到:

Context context; 
// init context here or provide it as a static method argument 
Intent i = new Intent(this, MainActivity.class); 
context.startActivity(i); 

所以方法應該是這樣的:

public static String executeHttpPost(Context context, String url, ArrayList<NameValuePair> postParameters) throws Exception { 
     // ... 
     else if (result.length() == 3) 
     { 
      Intent i = new Intent(this, MainActivity.class); 
      context.startActivity(i); 
     } 
     // ... 
}